pax_global_header00006660000000000000000000000064151232316270014514gustar00rootroot0000000000000052 comment=9963fb45a4d8415d9e4a9ba041e133d7b8de25b9 ellie-commons-sequeler-9963fb4/000077500000000000000000000000001512323162700164525ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/.editorconfig000066400000000000000000000002611512323162700211260ustar00rootroot00000000000000root = true [*] indent_style = space trim_trailing_whitespace = true insert_final_newline = true charset = utf-8 [*.{build,yml,xml*}] indent_size = 2 [*.vala] indent_size = 4 ellie-commons-sequeler-9963fb4/.github/000077500000000000000000000000001512323162700200125ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/.github/FUNDING.yml000066400000000000000000000011021512323162700216210ustar00rootroot00000000000000# These are supported funding model platforms github: [alecaddd] patreon: alecaddd open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: Alecaddd issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] ellie-commons-sequeler-9963fb4/.github/dependabot.yml000066400000000000000000000001661512323162700226450ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" ellie-commons-sequeler-9963fb4/.github/workflows/000077500000000000000000000000001512323162700220475ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/.github/workflows/ci.yml000066400000000000000000000020471512323162700231700ustar00rootroot00000000000000--- name: CI on: pull_request: types: - opened - reopened - synchronize jobs: flatpak: name: Flatpak runs-on: ubuntu-latest container: image: ghcr.io/elementary/flatpak-platform/runtime:8.2 options: --privileged steps: - name: Install bzip2 run: | apt-get update apt-get install -y bzip2 - name: Checkout uses: actions/checkout@v6 - name: Build uses: flatpak/flatpak-github-actions/flatpak-builder@v6.6 with: bundle: sequeler-nightly.flatpak manifest-path: io.github.ellie_commons.sequeler.yml run-tests: true repository-name: appcenter repository-url: https://flatpak.elementary.io/repo.flatpakrepo cache-key: "flatpak-builder-${{ github.sha }}" lint: name: Lint runs-on: ubuntu-latest container: image: valalang/lint steps: - name: Checkout uses: actions/checkout@v6 - name: Lint run: io.elementary.vala-lint -d . ellie-commons-sequeler-9963fb4/.github/workflows/flatpak-x-checker.yml000066400000000000000000000032101512323162700260570ustar00rootroot00000000000000--- name: Flatpak Manifest on: schedule: - cron: "0 0 * * MON" workflow_dispatch: {} jobs: flatpak-external-data-checker: name: Check for updates runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 - name: Update Flathub manifest uses: docker://ghcr.io/flathub/flatpak-external-data-checker:latest env: GIT_AUTHOR_NAME: github-actions[bot] GIT_COMMITTER_NAME: github-actions[bot] # email sets "github-actions[bot]" as commit author, see https://github.com/orgs/community/discussions/26560 GIT_AUTHOR_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com GIT_COMMITTER_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: # use --edit-only instead of --update to create single PR that updates all manifests args: --edit-only --never-fork build-aux/io.github.ellie_commons.sequeler.yml - name: Update AppCenter manifest uses: docker://ghcr.io/flathub/flatpak-external-data-checker:latest env: GIT_AUTHOR_NAME: github-actions[bot] GIT_COMMITTER_NAME: github-actions[bot] # email sets "github-actions[bot]" as commit author, see https://github.com/orgs/community/discussions/26560 GIT_AUTHOR_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com GIT_COMMITTER_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: --update --never-fork io.github.ellie_commons.sequeler.yml ellie-commons-sequeler-9963fb4/.github/workflows/gettext.yml000066400000000000000000000020701512323162700242550ustar00rootroot00000000000000--- name: Gettext on: # This workflow does't run every push because it takes some time to build # the app and not always translatable strings are modified on every push schedule: - cron: "0 9 15 * *" workflow_dispatch: {} jobs: gettext: name: Gettext runs-on: ubuntu-latest container: image: ghcr.io/elementary/flatpak-platform/runtime:8.2 options: --privileged steps: - name: Install bzip2, git, python3-git and jq run: | apt-get update apt-get install bzip2 git jq python3-git -y - name: Clone repository uses: actions/checkout@v6 with: token: ${{ secrets.GIT_USER_TOKEN }} - name: Configure Git run: | git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Update Translation Files uses: elementary/actions/gettext-flatpak@main with: manifest-path: io.github.ellie_commons.sequeler.yml env: GIT_USER_NAME: "github-actions[bot]" GIT_USER_EMAIL: "41898282+github-actions[bot]@users.noreply.github.com" ellie-commons-sequeler-9963fb4/.gitignore000066400000000000000000000001541512323162700204420ustar00rootroot00000000000000.snapcraft .vscode src/config.vala build/ _build/ parts/ prime/ stage/ builddir/ .flatpak-builder/ *~ *.snapellie-commons-sequeler-9963fb4/AUTHORS000066400000000000000000000000741512323162700175230ustar00rootroot00000000000000Alessandro "Alecaddd" Castellani ellie-commons-sequeler-9963fb4/LICENSE000066400000000000000000001045051512323162700174640ustar00rootroot00000000000000 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. {one line to give the program's name and a brief idea of what it does.} Copyright (C) {year} {name of author} This program is free software: you can 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: {project} Copyright (C) {year} {fullname} 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 . ellie-commons-sequeler-9963fb4/README.md000066400000000000000000000061331512323162700177340ustar00rootroot00000000000000# ![Sequeler](data/assets/sequeler-logo-transparent.png) > Friendly SQL Client [![Build Status](https://github.com/ellie-commons/sequeler/actions/workflows/ci.yml/badge.svg)](https://github.com/ellie-commons/sequeler/actions/workflows/ci.yml) [![Translation status](https://hosted.weblate.org/widgets/sequeler/-/svg-badge.svg)](https://hosted.weblate.org/engage/sequeler/?utm_source=widget) Sequeler is a native Linux SQL client built in Vala and Gtk. It allows you to connect to your local and remote databases, write SQL in a handy text editor with language recognition, and visualize SELECT results in a Gtk.Grid Widget. ![Database view in the light mode](data/assets/screenshots/database-light.png#gh-light-mode-only) ![Database view in the dark mode](data/assets/screenshots/database-dark.png#gh-dark-mode-only) ## Supported Databases - PostgreSQL - MariaDB/MySQL - SQLite ## Get it from the elementary OS AppCenter! Sequeler, is primarily available from the AppCenter of elementary OS. Download it from there! [![Get it on AppCenter](https://appcenter.elementary.io/badge.svg)](https://appcenter.elementary.io/io.github.ellie_commons.sequeler) ## Get it from Flathub! You can get Sequeler form Flathub no matter what distribution you're using. Download it or follow the instructions to install it from here! Get it from Flathub! ## Support the Project If you like Sequeler and you want to support its development, consider donating via [PayPal](https://www.paypal.me/alecaddd) or pledge on [Patreon](https://www.patreon.com/alecaddd). Become a Patron Donate on PayPal ## Install it from source You can install Sequeler by compiling from source, here's the list of dependencies required: - `gtk+-3.0>=3.22.29` - `granite>=5.3` - `glib-2.0` - `gee-0.8` - `gobject-2.0` - `libxml-2.0` - `libgda-5.0` - `gtksourceview-4` - `libsecret-1` - `libssh2` - `meson>=0.59.0` ## Building ``` meson build --prefix=/usr sudo ninja -C build install ``` ## Building development version The development version allows you to keep the stable version perfectly working while hacking on Sequeler. ``` meson build --prefix=/usr -Dprofile=development sudo ninja -C build install ``` You can run the application from terminal using ``` io.github.ellie_commons.sequeler.Devel ``` ### Help with the translation [![Translation status](https://hosted.weblate.org/widgets/sequeler/-/287x66-grey.png)](https://hosted.weblate.org/engage/sequeler/?utm_source=widget) ### Contributors - Alberto Fanjul - [Github](https://github.com/albfan) - Bilal Elmoussaoui - [Github](https://github.com/bilelmoussaoui) - [Paypal](https://www.paypal.me/BilalELMoussaoui) ellie-commons-sequeler-9963fb4/build-aux/000077500000000000000000000000001512323162700203445ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/build-aux/0001-Explicit-parameters-in-function-declaration.patch000066400000000000000000000024131512323162700323770ustar00rootroot00000000000000From 29b8e35416b6d2fd7a4e2dc60c5006d4dc7be2da Mon Sep 17 00:00:00 2001 From: Ryo Nakano Date: Sat, 20 Sep 2025 20:56:04 +0900 Subject: [PATCH] Explicit parameters in function declaration Function declaration with no prototype are forbidden in C23. See: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2841.htm --- libgda/sql-parser/lemon.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libgda/sql-parser/lemon.c b/libgda/sql-parser/lemon.c index afab40fd8..dac4b9697 100644 --- a/libgda/sql-parser/lemon.c +++ b/libgda/sql-parser/lemon.c @@ -70,12 +70,12 @@ static struct action *Action_new(void); static struct action *Action_sort(struct action *); /********** From the file "build.h" ************************************/ -void FindRulePrecedences(); -void FindFirstSets(); -void FindStates(); -void FindLinks(); -void FindFollowSets(); -void FindActions(); +void FindRulePrecedences(struct lemon *xp); +void FindFirstSets(struct lemon *lemp); +void FindStates(struct lemon *lemp); +void FindLinks(struct lemon *lemp); +void FindFollowSets(struct lemon *lemp); +void FindActions(struct lemon *lemp); /********* From the file "configlist.h" *********************************/ void Configlist_init(void); -- 2.43.0 ellie-commons-sequeler-9963fb4/build-aux/io.github.ellie_commons.sequeler.yml000066400000000000000000000142211512323162700274270ustar00rootroot00000000000000id: io.github.ellie_commons.sequeler runtime: org.gnome.Platform runtime-version: '49' sdk: org.gnome.Sdk base: io.elementary.BaseApp base-version: circe-25.08 command: io.github.ellie_commons.sequeler finish-args: - --share=ipc - --socket=fallback-x11 - --socket=wayland - --talk-name=org.freedesktop.secrets - --share=network - --socket=ssh-auth cleanup: - /include - /lib/pkgconfig - /share/vala - /man - '*.a' - '*.la' build-options: libdir: /app/lib modules: - name: gtksourceview buildsystem: meson build-options: config-opts: - -Dgtk_doc=false sources: - type: archive url: https://download.gnome.org/sources/gtksourceview/4.8/gtksourceview-4.8.4.tar.xz sha256: 7ec9d18fb283d1f84a3a3eff3b7a72b09a10c9c006597b3fbabbb5958420a87d x-checker-data: type: gnome name: gtksourceview versions: <: '4.99' - name: libgda build-options: config-opts: - --with-java=no - --with-jni=no - --with-oracle=no - --disable-gdaui-gi cflags: -Wno-error=incompatible-pointer-types -Wno-error=implicit-function-declaration sources: - type: archive url: https://download.gnome.org/sources/libgda/5.2/libgda-5.2.9.tar.xz sha256: 59caed8ca72b1ac6437c9844f0677f8a296d52cfd1c0049116026abfb1d87d9b x-checker-data: type: gnome name: libgda versions: <: 5.2.10 - type: patch path: 0001-Explicit-parameters-in-function-declaration.patch modules: - name: postgresql-libs build-options: config-opts: - --with-python=no - --with-perl=no - --with-libxml - --with-openssl sources: - type: archive url: https://ftp.postgresql.org/pub/source/v18.1/postgresql-18.1.tar.gz sha256: b0f18c2d6973d2aa023cfc77feda787d7bbe9c31a3977d0f04ac29885fb98ec4 x-checker-data: type: anitya project-id: 381406 url-template: https://ftp.postgresql.org/pub/source/v$version/postgresql-$version.tar.gz - name: jemalloc cleanup: - /bin/ - /share sources: - type: archive url: https://github.com/jemalloc/jemalloc/releases/download/5.3.0/jemalloc-5.3.0.tar.bz2 sha256: 2db82d1e7119df3e71b7640219b6dfe84789bc0537983c3b7ac4f7189aecfeaa x-checker-data: type: json url: https://api.github.com/repos/jemalloc/jemalloc/releases/latest version-query: .tag_name url-query: .assets[] | select(.name=="jemalloc-" + $version + ".tar.bz2") | .browser_download_url - name: libaio buildsystem: simple build-options: arch: i386: cflags: -march=x86-64 -mtune=generic -O2 -pipe -fno-stack-protector -fno-plt build-commands: - make - make prefix=/app install sources: - type: archive url: http://deb.debian.org/debian/pool/main/liba/libaio/libaio_0.3.113.orig.tar.gz sha256: 2c44d1c5fd0d43752287c9ae1eb9c023f04ef848ea8d4aafa46e9aedb678200b x-checker-data: type: html url: https://packages.debian.org/source/sid/libaio pattern: is-main-source: true - name: libfmt buildsystem: cmake-ninja sources: - type: git url: https://github.com/fmtlib/fmt.git tag: 12.1.0 commit: 407c905e45ad75fc29bf0f9bb7c5c2fd3475976f x-checker-data: type: git tag-pattern: ^([\d.]+)$ - name: mariadb buildsystem: cmake-ninja config-opts: - -DCMAKE_BUILD_TYPE=Release - -DBUILD_CONFIG=mysql_release - -DWITH_INNOBASE_STORAGE_ENGINE=1 - -DWITH_PCRE=system - -DWITH_LIBFMT=system - -DWITH_SBOM=0 - -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 - -DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1 - -DWITHOUT_PARTITION_STORAGE_ENGINE=1 - -DWITHOUT_TOKUDB=1 - -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 - -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 - -DWITHOUT_PBXT_STORAGE_ENGINE=1 - -DWITHOUT_SERVER=ON - -DPLUGIN_AUTH_PAM=NO cleanup: - /bin/ sources: - type: git url: https://github.com/MariaDB/server.git tag: mariadb-12.2.1 commit: 144dead8826f4a84008a76ef7fcc44e816f92930 x-checker-data: type: git tag-pattern: ^mariadb-([\d.]+)$ - name: intltool cleanup: - '*' sources: - type: archive url: https://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz sha256: 67c74d94196b153b774ab9f89b2fa6c6ba79352407037c8c14d5aeb334e959cd - name: libssh2 sources: - type: archive url: https://www.libssh2.org/download/libssh2-1.11.1.tar.gz sha256: d9ec76cbe34db98eec3539fe2c899d26b0c837cb3eb466a56b0f109cabf658f7 x-checker-data: type: anitya project-id: 1730 url-template: https://www.libssh2.org/download/libssh2-$version.tar.gz - name: libfiposix sources: - type: archive url: https://github.com/sionescu/libfixposix/archive/v0.5.1.tar.gz sha256: 5d9d3d321d4c7302040389c43f966a70d180abb58d1d7df370f39e0d402d50d4 x-checker-data: type: json url: https://api.github.com/repos/sionescu/libfixposix/releases/latest version-query: .tag_name | sub("^v"; "") url-query: '"https://github.com/sionescu/libfixposix/archive/" + .tag_name + ".tar.gz"' timestamp-query: .published_at - type: script dest-filename: autogen.sh commands: - autoreconf -vfi - name: sequeler buildsystem: meson build-options: config-opts: - -Dsized-app-icon=false sources: - type: dir path: ../ ellie-commons-sequeler-9963fb4/data/000077500000000000000000000000001512323162700173635ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/data/assets.gresource.xml000066400000000000000000000003171512323162700234050ustar00rootroot00000000000000 stylesheet.css ellie-commons-sequeler-9963fb4/data/assets/000077500000000000000000000000001512323162700206655ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/data/assets/icons/000077500000000000000000000000001512323162700220005ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/data/assets/icons/128x128/000077500000000000000000000000001512323162700227355ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/data/assets/icons/128x128/io.github.ellie_commons.sequeler.Devel.svg000066400000000000000000005070141512323162700330630ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/128x128/io.github.ellie_commons.sequeler.svg000066400000000000000000003530601512323162700320250ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/16x16/000077500000000000000000000000001512323162700225655ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/data/assets/icons/16x16/io.github.ellie_commons.sequeler.Devel.svg000066400000000000000000000425031512323162700327100ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/16x16/io.github.ellie_commons.sequeler.svg000066400000000000000000000415321512323162700316530ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/24x24/000077500000000000000000000000001512323162700225635ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/data/assets/icons/24x24/io.github.ellie_commons.sequeler.Devel.svg000066400000000000000000000645171512323162700327170ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/24x24/io.github.ellie_commons.sequeler.svg000066400000000000000000000645121512323162700316540ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/32x32/000077500000000000000000000000001512323162700225615ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/data/assets/icons/32x32/io.github.ellie_commons.sequeler.Devel.svg000066400000000000000000001474021512323162700327100ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/32x32/io.github.ellie_commons.sequeler.svg000066400000000000000000001253511512323162700316510ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/48x48/000077500000000000000000000000001512323162700225775ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/data/assets/icons/48x48/io.github.ellie_commons.sequeler.Devel.svg000066400000000000000000002120421512323162700327170ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/48x48/io.github.ellie_commons.sequeler.svg000066400000000000000000001530651512323162700316720ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/64x64/000077500000000000000000000000001512323162700225735ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/data/assets/icons/64x64/io.github.ellie_commons.sequeler.Devel.svg000066400000000000000000002221671512323162700327240ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/64x64/io.github.ellie_commons.sequeler.svg000066400000000000000000001605261512323162700316660ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/actions/000077500000000000000000000000001512323162700234405ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/data/assets/icons/actions/application-logout.svg000066400000000000000000000473151512323162700300050ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/actions/office-database-edit.svg000066400000000000000000000443101512323162700301030ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/actions/office-database-new.svg000066400000000000000000000366561512323162700277650ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/actions/office-database-remove.svg000066400000000000000000000362351512323162700304620ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/status/000077500000000000000000000000001512323162700233235ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/data/assets/icons/status/table-empty.svg000066400000000000000000000424661512323162700263030ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/icons/status/table.svg000066400000000000000000000411161512323162700251360ustar00rootroot00000000000000 image/svg+xml ellie-commons-sequeler-9963fb4/data/assets/screenshots/000077500000000000000000000000001512323162700232255ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/data/assets/screenshots/database-dark.png000066400000000000000000001154121512323162700264220ustar00rootroot00000000000000‰PNG  IHDRææÏŽ“sBIT|dˆ IDATxœìÝy|eþÀñÏ$i“Þ7--7(*—¸ ¢¢"^€ «üX@\E•ÕEQwQ×u=E”E”C@aEÖPQr—³Üg)½Ûœ3¿?JBZ’4½¯ïûõšW’9žyf2™ä›ç!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!D•Qj;5 1£B!„B4dZmg :5ä µ!›B!„B4F 2@oÁkC8!„B!„W¯öúÔÖÇ< !„B!„¨9õ*P¯/An}ɧB!„Bˆº¥Îéu9à­é¼Õås!„B!„ QMÍu2H¯‹ÁhUæ©.ŸB!„Bˆò«Ê ºNèu)p­l^ªúXêÒ¹B!„Bˆ† ªâʦW'ôº|V&ݶ®»B!„Bˆb ”+`×zp^ÛÁiEö_žmªâøjû !„B!D}WÁoyÒ¨Èþj-@¯Í ³¼ûög}Ó”`[!„B!ê&dÖ+o°]+Áym¨UûZ^Á¿B!„BˆÊ«Ê ¹¬´êt€^—‡$«hÀ]•zUm+„B!„Quµý®Že•Y·Rêj`îm½ªš_ž¼!„B!„¨ ª«j~E׫´š N«#(÷wž?û—@]!„B!jVE« {šïï<ö[Þõ*¥¦‚ÑÊtÜVz¾?Á¸”  !„B!DÝW%äþä• Ð«=8¯‰`´¢AyUäå)Q/k™B!„BˆªSÞ ¼¬`»¢z­çÕˆVWP®Tp™¯÷çµ·yÞH/„B!„¾U¶÷óò×å}îï>Ë»¼Âª3ȬlP^ÏëøšWžåB!„B!|«HÐ[:°Ö¼Ì¯Šç¾æ•gy…TWÐYAyYËu娯W%B!„BˆêU‘ŽÝ<æªõ¼mSç‚óÚÌ+”û Èëy Ö=åAJÍ…B!„¢z”7Ðõ8—ÂÝKÑ}èUœ×‹À¼¼Anyƒro¹âa™®Ô6eíß× ªÐ‘!„B!„¨kŠljsçÎåž8q"Âf³½o±X>läΩt5wð¯Íyyzm÷g™ßj"0÷§m¹§@ÜS'oîU× ¦€ÀÀÀ¡¡¡¡^vÙe‡£•ÕjEÓ44­Fš!„B!„¨fŠ¢ ( èõúC;wîtζX,K)Îí&gÕv磷àÜßÀÜÓë²æ—‹¾*¹ÀŸÀ¼"A¹{çnΠ<Àùh0ZƯ¸â ½Åbim³Ù$ B!„BˆHÓ4ìv;ªªF5mÚ4'##ãJUU¿SU5Ÿ’ÕÓÏÝù›–~^íª*0/oiyéöœ»÷¼î,)w>>Þ¬Y³È€€€‡ÃQ©ƒB!„BQ÷]¨!x8///Ñn·ÿÂÅŽâœ1¥{çnî*2JWyç—‹®ìUªLYc‰{ Ö½•šë¸P]§Óu “ \!„B!‡ÃAxxx˜N§ëFq­j—©í©SqÜæyzîk^µ¨ÉÀÜo¥çîóJŸ\g§o Z§Ó5•êëB!„BÑxhš†¢(‰š¦Es±fµûÈ];_z­¨ÎÀ¼¬¢þ²ªx*%wŸçêüMÓ´*ʳB!„BˆzBÓ´EQ¹úŠ!½—~^­ÕÖ=©ŠqÌýÉœ¿Õ®¾îiýÒÁ)ªªJ‡oB!„BÑȨª %Gð*]…ÝûøåNZ©eÞ¶ñ¥Òc×tUv{»SJMΓëä¬Î^ªâ !„B!„¨]žbÄÒ%åžJÌÁs|Z£ÕÛk3°-«´Ü½ê¯ªíB!„B!7_U×KÇ–à9P¯µø²ºóÊœ¯Æù¥O¨”˜ !„â111L›6îÝ»×vV„BÔŒÒq¢·òŠÄ‘Õ¼WEs•5†¹§õK//ý/‡”š×SÁÁÁ$''Óºukš7oNPPF£‘ÀÀ@¬V+‹…ÂÂBŽ?ÎáÇٻw/EEE2_åÕPŽC4L·ß~;Æ £M›6dffòõ×_óŸÿü‹ÅRÛY»Äã?ΩS§X²dI¹·]¿~=ÇŽcذaU’îSO=ÅŸþô'Ë.\È믿^î<ú“—úú~…††’’’BlllmgK!ª”Á` %%E)ƒ4M#-- »Ý^Ë9«UîÁ¶{pîp›ç|ôÖŽ.mo^é¶ãþªÉÀܯ^Ø=U'ðTåÀÙ¸ß9¸|uæ·NÉËËóx¼W÷¾–¶mÛ¹^kšzáÑùZ#=ý i»wÔH>=IHH`àÀ´mÛ–ÐÐPâââ Â`0 ÓéÐëõ@ñ˜„‡»ÝNQQäç瓞žÎŠ+8sæL£ÈWc=Ñp=ðÀL˜03gÎðÍ7ßУGzè!Ú´iÃSO=UÛÙ»ÄðáÃÙºu+‹/.÷¶š¦a³Ù<Þ¯+’îW_}Ezz:P€LŸ>€={öTø{ÐW^êóûµÿ~:uêDTT¡¡¡µ5!„¨0MÓp8 Å¡[JJ sæÌA§Ó¡iªª2zôh¶o߀ÝnG¯×»÷†ÎíûÏ=FôT]Ý=è†âØSu&ã–dãîj+0÷‡§’ñÒUØeUv³ÙÌÞ½{/™¿î§_øÃUWâü :ÿ°pN‡Ê;3Þ«µÀüòË/gÔ¨QÄÆÆ¹~$©ªJAAa‰|(Šâšt: Mˆ§}ûö|ôÑGìÚµ«A竱‡h¸¢££y衇8qâ7Üp………Øl6V¯^ÍM7ÝD«V­8|ø0:tà¯ý+;v$##ƒ ðÙgŸqå•Wòá‡òæ›oÒ½{wzôèÁÖ­[yöÙgINNöº,77—öíÛóôÓOÓ±cGNŸ>Íûï¿Ïš5k\ûKIIáüùó|òÉ',Y²„o¾ùƒÁ@=HMM¥[·n>Ó¹ñÆ™8q":Ž>øÀëyð”®·cv·iÓ&~ùå 8`øÏþ@`` ]ºtñš·‘#G2lØ0ÂÂÂHMMeþüùlܸÑc^Êû5zôh>üðCfΜɬY³*”ÏÜÜܪ¸ô…¢ÂíÛ·§ÿþ|òÉ'dgg»–„N§Ãn·Ɉ#X³f {÷îuÊ4î1béØÑÁ¥zRÙwÊßaМÞÚ{k àix4×øå@`@@À½±±±!©Ä¼°°G}‡Ãªª®éð‘£4ož„ÕbÅn·_2éõz6lØÈÁûj%ßO?ý4QQÑ(ŠBQQf³‹Å‚ÕjÅf³a³Ù\yu¾vV¹v®«Óé ¢cÇŽ¬ZµªA竱‡h¸ºuëÆwÞɬY³HKK#44”°°0æÏŸÏ‡~HAA¡¡¡ÌŸ?Ÿ¨¨(¦M›F||<úÓŸ8p๹¹Ü}÷Ý´mÛ–;wb4éÑ£6›C‡y]–––Æ‚ 0L›6-Z0räH~üñG¬V«ko½õ :”]»vñÅ_p×]wqàÀ&MšDnn®×t sæÌàƒ>à–[n¡eË–ddd°|ùòç!55µDºùùù^ùСC®í0™L˜L&†À矎Éd"22ÒkÞš7oΫ¯¾Ê¦M›xíµ×¸ù曹îºëøì³ÏزeK‰¼œ:uªÁ¼_6›»ï¾›õëדžž^¡|nÚ´©>Bá™Ãá %%…éÓ§sÍ5×pùå—Ó¶m[ƇÉdrÕÊÒëõôîÝ›¨¨(FŒÁwÜÁõ×_ÏæÍ›9{ö,:]Ã.ËT…sçÎØl¶¥€â \u›´R“»Ò%åøx]fVʹ~ Õñ.•·«yo¹•ÐK÷ÄÞ°¯0ôªÊþ~¸¤D\UUT‡‡ê69.NªêpŽóW+ŒF#‡ƒ¼ü| ‹Š(2›Ë5‘—ŸÝ¡b2™|¾ëqˆ†«I“&dff–ø‘Œ¦iØívúöíKTT³fÍbÞ¼y®êÒƒ r­ÿÓO?ñÔSO1vìXÚ´iãsYß¾}‰ŽŽfæÌ™¬^½š—_~½^O¿~ý\û›={6}ôcÆŒá¹çžãàÁƒüþû飯Êùóçùé§Ÿ|¦sõÕWÈìÙ³™3gO=õ”×BžÒ-ë˜Ëâ+oξ#±Z­ÜqÇ\}õÕ¨ªzI^ÒûUúüT&ŸBQÓ4M#99™7ÞxƒèèhŠŠŠèÚµ+#FŒ 44”ôôtÒÒÒHKK#==ÐÐPî»ï>ºvíJQQQQQ¼ùæ›$''7ª&¿”lgî©Ð·t\ê©)uiÞúJ«RµQ•½¬ƒðÖe½ûc‰“ܘژØlÜdäÐçKiÕ§O‰eªz18wëîUÙU=ªªÖÚ¹:}ú4ÉÉí1›Í˜-–rçCQL&#ÆÀŽ>TeÇQWóU^ å8DÃuüøqK\_¡¡¡„„„““CLL GŽ!<<œììlÌf3 ®mŽ9BLLŒ+àÔëõ>—ÅÅÅðâ‹/òâ‹/ºöÛ´iSW5ÀC‡ŽÝngÁ‚äZ788¸\éœ?«Õ pÉg©tºþ³7Îå¾ò¶mÛ6f̘Áƒ>ÈÇLAAóçÏçý÷ß¿$/îû«ïï—{ž+›O!„¨i6›Þ½{GQQªªb·ÛÙ·o{öì!""ÂÕtñÔ©Slܸ‘Ž;’œœ 7gŒ¥W¯^ìÙ³‡€€€Ú<"##Y¹re‰~@ÒÓÓú¨Î¶3ÏÊÊâÛo¿-1¯’µ•ʧ¼ôˆ^uªw¼Úì•ÝÓ0hîËK?÷t‚+}2ÿýïÓ¬Y3}ôQΟ?wx3cÆ Ž?ΤI“*»‹*[XÈ]a¡Ü{ë-„EE¡¸´Dóbp~±Ä¼dUw ­«²X­6²³sˆŠŠ$<<£1U-nî¡Óé (¾$m6»«Ú½N§Ãh $77ììll6[£ÉWy5”ã Snn.o¼ñÏ>û,Ÿ}ö›7o¦sçÎ4oÞœeË–±oß>Ž=Êùóç1b6›ë®»(¬¢¾ÿþ{²³³™…¢:ét:Ìf3[·n¥G9r»ÝNçÎKtâ Å%Æ&“‰+®¸‚½{÷rìØ1Ú·oOjj*EEE„‡‡×òÑx¦( /½ô·Þz+!!!U’$ž t¥‡Bs>÷4¬Z—fÖd‰³§ ÚSpí­³8ð^‚^a têÔ‰Ù³gMtt4³gϦS§N$$$T6ùJÓiíóòðk¯#ðL¶ŒLôç³ønìØSæž=¨Ú–_lc®ÖjóâNNJǽÕ4 EQ°X¬œ;wŽƒÓÙ´i_ý-ß|³ŠM›6sð`:çÎeb±XÅõG„õBm†ž¯Æz¢áÒëõ|øá‡Œ?ž3gÎpà 7`±Xxå•WxòÉ' Àf³1dÈöîÝ˸qãˆŽŽæÉ'ŸäǬð~‹ŠŠøãÿÈñãÇyôÑGiÓ¦ ¯¼ò Ë–-+±¿‡~˜¸¸8&MšÄ÷ßÀ”)S8uêãÇÇd2yM';;›1cÆÍ!CXºti‰žsKsO7$$¤ÒÇìë—.]Ê¿þõ/:wîÌ+¯¼‚ªªŒ5ŠŒŒŒKòéJ³¾¿_QQQ®4«#ŸBQ]ôz=)))ôîÝ›`±X8sæ ­Zµr­“ššêjò³uëV×üV­ZqæÌÌf3ƒ ¢wïÞ¤¤¤ÔÉRó¨¨(–,YBHHˆ«©R%y*!ßñeém=¥Y#*»#_™/]êí­ÄÛ½€{õý…×ÎÇŠKø#`B‚ƒƒ¶oß>®¢„ÍfãóÏ?'%%…ýû÷ÅUÓÒÒ2dH­¶Çp8èRPÀ½ÍšÑ½CÈÍE³ZÑÇǃ‡ªzkZ%ó‡ÿû#EE%‡ÇÒTÍõOÚŒwg±îÇ5µp4ðú믳{w‘‘‘´oßž˜˜rrrJLÙÙ9(ŠBDDD‰)<<Œóç3Ù»w/99¹\~ùeüå/iÐùj¬Ç!¾üü|òòò°Ùl BBBwýóoµZÉÊÊÂjµ¢×ë #,, ³ÙÌ™3gˆŒŒ$""MÓ8zô(AAA„‡‡{]Ö¤I“i ‚ƒƒ‰ˆˆ¸d:Žððp€â¡hrss±Ûí$%%a·Û½¦SXXHVVdeea0hÚ´é%çÀWºîÇì³ vRR’kž¯cÌÎÎ&??ßU½122ÒÕ&»t^JwZW_߯˜˜222\û¨H>à !DMêС3gÎÄ`0 ª*œ9s†„„ Û¶mã/ù ùùù„„„0mÚ4ºté‚ÝnçÌ™34iÒ„¸¸8t:‡ƒ‡~Øãp˵iþüù\qÅìÙ³‡»ï¾›)S¦Ð¿úõëW®tt:ûöíË(,,üP˜ `ì÷Ô®r±·v{hWK=zêÁ½toîZ©G<,+·š¨Ê^‘àßW)ºû¼Jÿƒ¡Óé‹™ãÇqþ|&ÇŽ£iÓ¦Üxã;v¬Á竱‡høBCCKtôRZ`` ñññ—Ì7™L—´‹vík™·4ËZR¢z¯uƒƒƒ v½öuŒåI×÷€ÜŸ4"##K”†ûÊKiõùýò'Ͳò)„5MUUôz½+ð¶Ùl„„„ i:Ž•+W¢(ŠëžVPPÀ—_~I·nÝÐ4………@ñ½±.ֆܱcv»áÇ£×ëyúé§™4i±±±M²¬NÄÝç—7€®öÎàª:0÷§ÇuoóÊ:‰î¥ëþtkï½^OTTT‰ÎbE!..ÎÕæ¼¶lTUô0BÕhŸ”„f±‚ª¢¿PjPšÝî¸Ðé›ç^ÙU‡ãB{ãÚ‘••EHH(ýûß‚¦©8p€Ã‡sæÌòóó]ci+ŠB`` &“‰ÐÐPhݺ57ÜpçΫÒ÷¦üù "44„¸&M1[DD%Ü>…¬¬,23kïš©«çW!„BøOÓ4W3T(ŽWôz}‰àÚd2¹â—   WUugP¯(Šk}glP[ŒF#KqsKg_^à‘GÁjµÒ¤Iôz=111•ÍgYñ¢·SÃsà]V0^¥Áz]ézÔÛ ó4yڦœmÊÕס¸×ÖÙ³g3f̘Z PŒQQ¬ËÊ"sÿ>†ååqUËV(6;öÂ"~9{GdŠ¢C§Ó¡(e·zíüMÕ4ªZ«9p¡Ís&QQ‘téÒ•”””âNé4 Nq5(î5\>Ù<ãX—ªaµÙP¬Á\rK­ä+''—õ¿üNhH0‹•k¯í À† ›0ô™ ¡°°JÚÉTÛq8ϯ¢(èt:\¿™Í½ !„Bˆêçp8°Ùl¹†Isþ¾WU•;ÔÔTW°Äí·ßîY¯×c41èt:¬V+v»½ÖŽçÛo¿eݺu¼ýöÛÌœ9“äädW“£Òªà7¨§‚ÝÒSé@¼ÚKÃýQÆ1÷çì»ë¥¯”wß}·D›rÀÕæüÝwßeذa•ÝE…éõz¢£Ù¥×óöÉãü1?ŸþíÚcTUl‘ôz{:F£“É„N§cõšµ8TÇ…¥³mùŶæÔZ¬Ên·Û1›ÍFWçdf³ÅgèðˆpŠ´ ž:¢CÕT^žóV•þëço¾@ÁbS¹ªG7 ‹¢m›V™)(($$$˜ü¼„BøÇY Ýh4^h–X\=((£ÑHNNÎ%Ë WÕðÂÂBt::u¢E‹uêÌ¿ÿýoþö·¿UÇÞbDO±¥·×ZµöÊæ5ÝÕ½1¿ûëJñxëõú:1†¹;EQ0è›4áë“'qï= ×ë]µ¦iج61[,8*š¦–ìü­«²wNBß¾7Я_?öïßÏ¡C‡Øµë99Ù¹Ú¿œow˜›‚^W܆~ÁÌj!šÎÈ#ƒÆ¢v‡ñÏMÂZCùêtù•\Û§­Z5Çf³ñó/ILlBÓ„6ü¶…Aú“œÜ†€€~úé×ÌËs~Û9„çžC§Ó¡Ó)%Úó8¯‡ÝÎä¿NªÑc¢.JII¡OŸ>®áµ–,Y Aƒ0 Ì›7¾}û’––ÆæÍ›Ñét¼üòË,X°€.]º°`Á^~ùež}öY #FŒ ::›ÍÆìÙ³±X,ÜyçtëÖ EQX´h{öì!%%…~ýúÅ×_Íï¿w IDATÿN—.]èÛ·/ÿûßÿX»v-aaaôêÕ‹îÝ»3oÞ}'''§ªwåVYgáÈC…ûšz‡ÊÛŽ¼ô6¥·/=X|ƒç œ0„„pÙ€%†¿ˆŒ gß¾ƒ$%%„Ý— ;T ­‡JÐ4 ³ùbçd—]v9ÉÉÉ;'û×H=÷-ƒ^N) 9MFÁ<ªF á8ªàxüÍ×â¥+\ÿXªzƒæÍšQXTt± ÔÚpå9¿?>ö89_| ¹9èu:” Á¹¦9k_hhaaurh !jCRRS§N¥wïÞÜsÏ=¼ôÒKôìÙ“¾}û²qãFúöíËæÍ›éØ±#{÷îÅqaxËÒ:vìˆÁ`àÍ7ߤcÇŽÄÄÄF‹-˜:u*áááLš4‰É“'ÀÔ©S±X,˜L&n¿ýv^ýuºvíÊ7ÞÈñãÇ9|ø0Ý»w端¾BÓ4 @FF¯¾ú*ªªb³Ù\íÝ 0€>øÀõºC‡ìرÃõƒ/55•””~ûí7¿×)!„å·~ýzn½õVš5kæêm½¨¨ˆÂÂBŒF£ëw]QQÙÙÙ®N}:ŽÃ‡óÓO?ÕòQÀµ×^‹Ífs½Öét$&&VÇÐÔîA¹§ùîÏÝË ¤k¤½®ôÊîMY'±QqçÅ”vIÐÔùŠN=z‚½ûÒ1HlOHH½³ÙŒªÖÞpiš¦‘žžNppˆk<\_“å˜s  &}$:Ž"G…öL‚ Ñ„ê£Q »ÃZÉ*0åÉWpP [¶lÃl6Ó¦u ºw»ŒM›·ÐãÊ+PU•óÃëØ¶mKåNX5‡¢(ØrrÑZ¶Fz¥¸ýÅÄPT U­Ý¡5„¨K8€ªªœ>}š£G¢ª*ǧsçÎìß¿Ÿû^O÷îÝùý÷ß½¦søða†ÎÿøG~þùgN:Åí·ßNll,>ú(ááá®ÏqZZš+ømݺ5»wï¦iÓ¦ôìÙ“ùóçsóÍ7Ó²eK~ûí7ú÷ïÏ–-%ï=ªªbµ×+ºÿþûYµjU‰åݺuãäÉ“œ9sÆ5/<<¼Déxnn.ááá%¶+k¹w!Dåèõz<È”)SøÇ?þAóæÍY»v-iiiÜvÛm´hÑÂU]¯×sôèQ¾þúkRRR¸îºë8rä/¼ð$:ºrÍ>+«iÓ¦5¹»òöÖ)µ˜—ÕC»§¡Ó<­×èxêðÎ`0ЦMKZ¶lÆÉ“§9pð»ƒ&ñ±ÄDGaµXk­TQ>ÿüsmÚ´¥K—.®6òÅý•¬Nm´G±rE(AôêÝ”"»Íaæ‹oääÁll6ùgU*Ó¿dyò`Ðaw@aaz½žØ˜úÝt-PüÏŸ^¯'''³¹ˆCéûk´çËòž_[d$Kwï$À€!À€Á`Àn³‘_P@QQgÏžÅf³qZJÌ…|šš¦±k×.RRRh×® .¤C‡%>sÎ*„ùùùL:•^½z1~üx>ýôS¬V+ßÿ=?þø£Ïý6iÒ„ÌÌL’’’زe ÙÙÙìÙ³‡–-[ºJO¼¹÷Þ{9wîëׯwÍS…0sæÌëæååÑ¢E ×ë°°0Ξ=[îu„BTŒóÞÁþýûyöÙgùÃþÀ—_~ÉùóçÙ½{7o¾ùf‰ßõo¼ñ¿üò ÑÑÑlß¾7rèÐ!¢.ôäìg¨‘ð7†ôÖù[­¨íÀÜÉß!ÔÊêŽÑp¶%ñ&22’Úsâä)vïÞéÓg .–¸×4UU™7o]ºtaË–Í4mÚ”6mÚ‚N§#$$øÂ¸ì C’Fˆ†Æ'û_ÁlµPd·¢8ÌÙ{Ž3_èQ”€â*<•üÐß|)ŠÂ©Óç uëNL&#mZÿ0=pð0ùù„††AXX85ý¹.ÏùMý 䓞~S§Nqøða¶l9T|ó6è 0Uöô Ñ(lܸ‘»ï¾ÛU²ž››K›6mP…6mÚ`2™hÙ²%qqqüðÃèõz’““Ù´iC‡eݺu˜L&† Âüùó/ÙGvv6-Z´`ýúõŒ9’={öУG²²²ˆŽŽö0€€€–,YRb~·nÝ8~ü8(ŠBll,ìÝ»—²råJ4M£[·nLŸ>½Üë!„¨8gÐΡC‡HKK#44”¨¨(׹Ϊìf³»ÝNTTV«•yóæa2™\5™TU­Žjãu·ý­[gr§º˜û«Ñâp±çuMÓhݺµßÛ÷êFë6mÑ. ©Vÿ˜Fôz=Û¶mã÷ß'**Џ¸8¢££ ¼ä†¡ª*«…³mŽa¤¦€hWMªìœ¯<ù ¤°°‹Å ( ŽâÿôÓ/˜ÍEDDD²dñ|ÂÂB«,Õqp±Šë¹sçÈÌÌäüùó˜L&bbbjµƒ!ê£ôôtâããùòË/8qâ§NâÅ_d÷îÝdeepêÔ)Hß¾})**bÑ¢Eœ?žíÛ·3iRqg‹¥«›;9r„°råJ¶lÙ½÷Þˆ ¸ñÆiÙ²%Ÿ~úé%Û´mÛ–»îº‹Ã‡óì³Ï0sæLΟ?Ï€xÿý÷âÒø &0eÊòòòøßÿþçÊÏêÕ«ÉÎÎ&>>¾\ë!„¨8gAš^¯'""‚ÐÐP×ï÷Ý»wó׿þÕ˜Ûl6vïÞMpp0ƒ“Éäª5éL«ªwqce2ëi۲ƌSJM::@áµáÂkºMÁ@hppðÚµkÓ:©rv0æ;»¼Û:ÛÆÄÄÔú¿fªªb6›1›ÍX­ÖC¼®ª×zƒÓÌÇ\ÜÖœ©#üH /)Wo¾Š)( të~×^w#?¯_ËŽí©Øíš4‰«õÀÖïó«×»j_˜L¦Z¿.„¨¯‚ƒƒyæ™gxá…ªµFÒ Aƒˆˆˆ`Ñ¢E®Qt:tÔ(„ Œûw‰ó¹ó^o±X((((ñ».$$ÄU›ÖS@ÞƒsNÇ2 òBÀê6Ù;ìDqé¸ãÂkõÂëÒîžãṯyeªk¹ÞíQçöh 8wçF ˆF˜CÕôø]ƒ/_?d³²²\?@¡¸gú¨[Û[¾E!//ììl ¸é@M¶)//_Ç!„¨œ-Z0jÔ(V®\Ijjjµï¯gÏžôêÕËÕënvv6üqµïW!Díò÷߯öûÎC`^X¸”[¹˜;Ü5·G Ì);0×s±Äܘ›¸˜ÏiL¹B!„Bˆbnùƒ\ ÌÍ\ Ì%æêp`^÷ŠN=«wÝÝ !„B!„¨Q¾†Û®ÓêB`^Þ%Á¹B!„Bw•‰k=®¬îªªëKô²çiLo!„B!„ [©8°:{c¯ÖaÕêB‰¹¿jý_ !„B!„õF½‰!«+0/«c8_Û”çäÕ›-„B!„¢ÚT$Žô7F­è~üV—KÌkì$!„B!„hPêU|¸_û¨«œãÏ«ªÊìÙ³Y¾|9_~ù%+V¬à³Ï>cùòå¼÷Þ{,[¶Œãéi¬ž±˜n]ºÐùò®<Ù¢·Ï´¯¹æ¦OŸÎ_|ÁÌ™3×ûhØv¿ÆGŸ:u*………¼úê«òÀðä“OòÜsÏ0hÐ Ž=Êþýûý;˜r¨Î´K«Š{‘¦Ý¡âp=oµZ1 ®Ú :‹ÅB`` _é <˜üãÌ;—wß}—.]º0vìXbbbxõÕW+•×áÇ“žžÎîÝ»k-¯k»ÝÎé³Þût0X¿a-Mbã¸éæ¾®jíç22=î`úôélÛ¶ˆˆÆŒÃóÏ?ÏÃ?\fž==÷Äýú=zô(÷Þ{¯Ïõ«ZUWewÞ[Eñù§¤9篿ô,7Œ|€Í§ ¸ìPŠUñºÿ[o½•‰'²téRæÍ›G«V­¸ï¾ûˆç½÷Þ«TžkŠü–B4&*0÷æý÷ß'**ŠiÓ¦ñé§ŸòÙgŸ‘˜˜Èĉi×®'OžäwÞaÏž=Ü|óÍŒ5 NGjj*Ó¦MãwÞ¹$ OÚ¶mËĉiÞ¼9¿ýö[‰®o½õVî¼óN’’’8pà/¿ü2™™™óçm]§Ûn»x«ÕÊâÅ‹Y±b…Ï}x;.»Ýîó\ˆúéÚk¯åÊ+¯,s½M›6±~ýú*Ûott4gΜñ¹Î©S§ˆŽŽ®²}V%U-®Ò{ûMIÝq„nW´p=ÿê»í®uBâÈÏËò˜Ndd$­ZµbòäÉüþûïœÍœ9sظq#‰‰‰Ì›7_|‘‘#GÃÒ¥KY´hwÜqÆ #((ˆÔÔT¦OŸN^^^EOm¹8KÌEaîܹ„††Š¢(8 jìšÎ³£Sø}×Ιî`yÚÏü”‘æ1ÍÀÀ@FÍ‚ øøãؼy3§OŸæùçŸç‹/¾@Ó4Ÿ÷oï•ó\ºßZ·nM=\ªêt:/^ÌÂ… Y¾|y œE!„¨ÿ¤*;0nÜ8²²²˜8q"Ÿ}ö:Ž—^z‰ï¾ûŽÁƒ³dÉþþ÷¿DXXO<ñÏ?ÿ<÷ß?\yå•—¤á‰Á``êÔ©|ýõ× 2„õë×Ó§O"""¸óÎ;™1c÷ÜsGåÏþ³ÇüùZŠl¥¤¤0bĦL™Âˆ#¸âŠ+|nçí¸| Q]wÝuÜqÇeN×_}•î733“„„Ÿë4mÚ´ÎöÌî ú¾ún;;öç«ï¶—xî\'2*ŽäŽÝ¼¦“““ÃéÓ§¹ï¾ûèÑ£ƒðßÿþ€Ñ£GSPPÀ[o½Åo¼áÚîÆoäí·ß.³º€€þùÏ’™™Éc=ÆÚµkyæ™gˆŽŽöš¶/Îý¦¦¦òÏþ“ãÇóðó~ýzþñTºPY4MÃaWqØ‹KÛµkÇe—]F||¼«´ÑŸ Š;‡‹ŽŽvk§ùóçÓ»wo döìÙœ={–¡C‡²bÅ Þ{ï½Ë <˜©S§²bÅ üqZ·nÍÀÉËËãïÿ;S¦LÁ`00kÖ,>ÌÝwßÍš5k˜1cF‰?žüI§ºèuþUÝw®WžjíPü½rýõ×sâÄ 1 ~]?±±±Œ5Šo¾ù†±cÇ’ŸŸÏ„ ïŸ (yÝO˜0Õ«W3uêÔÕão¹åÞ~ûmÖ¬Yßÿügš7oNBB?þ8 ,`ܸq@qS‡šâ~ 5Š!C†0dÈn¹åú÷ïÏ}®DÛ9[‡t„œãôHÎ`û ø:s;§ìžû¼hÖ¬|ûí·%æÿüóÏ•ÙLŸ÷Êý~ôí·ßÒªU+×gäÊ+¯$44”ï¿ÿ¾r'G! Ì=HIIA¯×óÍ7ß i?þø#EEEtèЋłÕj¥uëÖhšÆ{ï½Ço¿ýæWº:uÂh4òÕW_a·ÛY·nûö튨7Ž]»vLVV­[·ö˜NYë*ŠÂÇŒÅbáСCüüóÏÜxã>·óv\¾Î…¨¿¦OŸÎ|®sèÐ!Þyç*Ýïúõë4h×6ŽŠ¢pçwòË/¿Té~«‚³ÊjË€ëxÿ®ßÞõo¼×o%ž· ¸Ž³YtÿÃuè|´WÖ4‰'rðàA^|ñE–.]Ê<@xx8………hš†ÙlÆb±¸¶›7o¿þú+çÏûî»[·nÄÇÇ3wî\>Ì'Ÿ|Â_ÿúW²²²¼¦í‹s¿-Z´ 66–9sæpêÔ)>ýôS×þª›Ã¡ºÚ˜oÛ¶]»v±{÷n×ä<®²8Û"ûª¹Ñ³gO™>}:éééÌ;—ŒŒŒý|òÉ'lÚ´‰·Þz ‡ÃA»víÈÏ/°°³ÙLÏž=‰gÚ´i;vŒ>øMÓèÙ³g¹Ò©.:Å¿ŸÎõÖoXëWs—^z‰Õ«W³lÙ2’““yùå—èÒ¥‹_×Ϲsçø¿ÿû?V®\‰ÕjåìÙ³´iÓðþÙp¦ã¼î=ÊgŸ}ÆùóçKÙË—/gÇŽüç?ÿÁápвeKŠŠŠPU•&Mš`µZy饗j´”WUUW©ùܹsùðÃùïÿˇ~ÈWÿ]Ä7¯ÝÎmC:@Î  gãW{iÒºÙEÞ¯÷øøâæî5éœÎ;çZî?ï•ûýèðáÃìß¿Ÿn¸€›nº‰_ý•œœœrŸ!„h¬¤*»ñññÄÆÆ²páÂó£¢¢°Z­üãÿ`Ô¨QLœ8‘ï¿ÿž¹sç’•å¹Êª»¸¸8ÒÓÓKüxtþ84 <øàƒôìÙ“¢¢"rrr¼vDTÖºš¦•ø2>xð ={öô¹·ãòu.Dý•ŸŸÏßþö7Þxã Z´hqÉò'NðÌ3Ï››[¥û;w.K–,a„ ¼óÎ;%> Š¢ðøãÓ¹sg^yå•*ÝoUq–Ê.ß\\5Ôùè|®·…°á÷ÜÚ¯kÖúþÃîܹs¼õÖ[Ìž=›Þ½{3bĺuëæ*ôäìÙ³~å3..Ž‚‚‚ÁçÁƒýÚÖ×~Ðëõ,^¼¸Äò²~äW–¦iØÅ“ªª®Þ× 6› ›Í†^¯w5#ðÅÙÛ“&M¼ÖÌhÚ´)yyy%–ïÞ½»Dµù'NPTTDQQÃ¥_§III ~ü±do扉‰ìܹÓïtêŠÈÈHWµv_œmÌ~øa"""\}øº~œRCqÉ÷رc¹æšk°Ûídgg£Ó•ý'‚§ë~ÿþý4iÒÄõÚ¹Ìl6c6›1 äääð¯ý‹Q£F1bĶnÝÊÌ™3+õ™)çu«i÷ÝwŸk¾­à ž8?³111—ü Õ¤I×uç?ïUéûÑ·ß~ËàÁƒY¸p!½{÷vý!#„Â?u÷@5(«“çòÌÌLÒÓÓyôÑG=®—ššJjj*ááá<õÔS :”÷ß¿Ì}dffºz’u®“ÀÎ;éÛ·/=zôà‘G¡°°>}ú0räHÌøZWÓ4E!&&†ŒŒ ’““ÉÈÈ(sžŽë×_õy.Dý•••ÅÓO?Í´iÓJT/?{ö,“&MòXÒâ®"òœ¯÷^Õo¾ùfúõëÇøñã9qâ àÁôk¿¥¯û¶mÛòÝwß•¹íúõëY»v-III<ñÄŒ7®ÚÚö—æÞÆü“O>!66½^OTú{´om„¼ÓÁ†ÿí!¤ïÛèBâ1™Ž`4½þuìØ1rss¹ùæ›™?>C† ¡W¯^¬\¹“ÉÄÞ½{}~öý}¯ÜýðÃŒ;–AƒQTTäê?C!„¤*û™™™®ÕwíÚEDD7ß|3Š¢Ð¾}{fÍšEXX Ì;—ØØX¬V+f³“ÉtIžìܹ³ÙÌí·ßŽN§ãºë®sêz½‡Ã¢(s÷Ýw{Í_YëjšÆý÷ßO`` -[¶¤wïÞüðÃ>·óv\¾Î…¨ÿ222JáçÎãÉ'Ÿ,³ƒ¶Êذa÷Üsû÷ïgôèÑLŸ>ádzcdž ÆhÛ¶-³fͪöNàÊú¬ôä Ì_ýji'·ñêW“xõ«Iì?šÎølX! IDAT†>½º—¨ríkHµGy„‡zˆ˜˜Z¶lIÿþýÉÈÈ //MÓÈÈÈ ]»v„……•mÁ9eddŸŸÏСCéÔ©>ø v»MÓØºu+Œ9’¤¤$†ÊÛo¿MBBÂ%iûJ§ô~·nÝJnn.£F"66–ë®»Ž W%CÈùzŸvÍÕÆüòË/§M›6´iÓ†Ž;Ò¡Cš5kæW‰¹ÅbaÚ´iŒ?ž'žx‚>}ú0~üxüq–/_NAA7näôéÓ<òÈ#´hÑ‚#FïW`~êÔ):uêDdd$¿ýöÙÙÙL˜0„„n¹å¾ûî»%ïþ¤S^þ\ËNm[¶/srç¬Öî+]çó;w²k×.þïÿþϯëǹ­³Ç}MÓhÛ¶­« ûµïé³á~Ý'&&r×]wËêÕ«=~†œ¯¯¸â ¾øâ zôè᪡(Š_ç°¼÷o÷ç4|øpn¹å®ïÑš.ÅÔâzv¥f²ái˜®}cT3ö™¦ÅbáÃ?dĈüùÏæðáÃ$%%1yòd/^̉'ʼ‡øó^¹O999üú믌1‚Õ«W»ÞÃÊNBÑX4ªs_,XÀc=ƺuë˜3g“'Oæ±Çcܸq?~œ ——G^^_~ù%ÿú׿ˆ‰‰aÇŽ®ž}K§QšÍfã…^à‰'ž`̘1üöÛoüðÃ|÷ÝwtïÞ püøqÖ¯_ïj«U:í?þØçºìÞ½› `·Û™?>Û·o'--Íëv§OŸöx\6›Íë¹ ÃÉ“'™4iÇç“O>qUõ­N§NòZÍq̘1Ìš5‹äädæÌ™ÃC=Ĺsçª=OþPU•'ûÿ³Ä¼Ìó¹lÙ¾Ÿ«º_Ž^ѱî—ÍtéÔÒg:'Nœàµ×^cìØ±Üu×]=z”©S§ºÖùä“OxðÁiÖ¬™Ç¡TUå7Þà‘Gá¹çžãã?檫®ŠƒÏ¿ýío<öØcÌœ9“ŒŒ ^|ñEWÏËîiO™2Åk:¥ñÌ3Ïðè£2gÎŽ=ʼyóü®b_QÅ%æ{eß¾};ƒ¡D_­ZµrµÑ/ËÒ¥KÉÉÉaôèÑŒ9’³gÏ2sæL>úè# ¸šó˜1cxî¹çŠÇŽ>~œ &žž^fI÷{ï½ÇĉiÕªãÇg̘1Lž<™+VpèÐ!f̘Á©S§ÊNux{Æ[Õ’®»Å‹3uêTÚ·oϾ}û¼^?«V­¢wïÞÌ;—ãÇóóÏ?3pà@×roŸÒ×ýéÓ§yá…8vì˜ÏqÎwìØÁ‚ x衇hÚ´){öìñ»cĪà^b¾páBbbbÐN®æž‡Àš¯q(KOصoÔž¨¨(WOíeùꫯÈÏÏçÞ{ïåî»ïæÌ™3FWÿ"¾î!¾>ë¾Îåºuë¸öÚk/étN!DÙüëZÕÿm¥Ÿ+—ØëJ=×z·ç àÂcà…)0]˜^éÚµëeÞ2éü·5//6mÚøU¢RV­Zuɼ9sæ\Ò^KˆúJ§Ó‘žžîª=á­C·ŠˆŽŽfÖ¬Y´k׎]»v1bÄ¿·=qâIII^—Wôž‘‘Á×_ÍfsÍË<ŸKêŽýt½¢zÂæm»±ÛítéÔŠÿþï6ýzé}À¢(ÄÅÅaµZÉÎÎö+õN§cÏž={m[s—)téw+YE* ÈgÛ¶ma·Û±ÙlдiSš4iB¯^½m‡ÃÝn/÷w]ÿ[oâ±GŸàà‘}e®Û¶e{Þžñ«¾)»zxe9K­ëM+n2vèÐ!Ú¶m[éß#GŽä¶Ûns}>ìv+wÞrGô¢å·’XÜ›{Ç{+W®dáÂ…~èî:wîÌm·ÝÆ[o½åwçþ ãñÇ'**Š'Ÿ|²JÒ¬Îï!DòuëÖ]Àßó…©°^˜þŸ½ûªJÜ8þÎLz! „*MŠtt•" ôbùIWQPª  ˆ ÈŠkeÅî èRDª tE!4©..@Šôn€´Iƒd2¿?HÆ !ÀÉ÷ó<÷™ËÜ3çž sï¹ï­i’R3^Ó3G–ñtIÎKÆ3å0žÓkVWÕyqÄü:iÛ¶­é&·¬èèhõïß_Ÿ}öY¾7<¯—¬§œJRtŒ]Ûvü¡ÚwT“Ѧ­Ûö(=Ý‘q4+oêN§óºmöN§3ãót·Ó~3ÿ/|}}uþüù˜gòññÑùóçuèÐ!6Âkd±Xd³Ùäëëkº)ùÆÎºËjýëĬÜÿ„‚ãããÃßú:r:®°Èßúúñ„À…&˜[­VùúúÒÄjµº…®[ ;ën¬¤¤$6¬¯3§Ó)íÝ»×tS<^æ:cÏž=ü®¯“[y0\BÌ3ÝêA¸ݪ¥ì¬»1,‹J—.}ËþNn%N§Sqqqìh‚Ç`» @aR(‚¹äØh®Í­²ØYwc%$$Üò¿™[Óé䲌$s;‚ßõÁß@aPh‚yV¬à°³îÆ`}{ãdþ­ù=_™;ôø[_?¬;6…2˜@Vl“ð{¾qø[ çp`ÁƒæD0À ¸ùÏ!ܪ<"˜óÜVY±³·æUµjÕç…˜ÕjÕo¿ý¦úõëó; –{ ð²Z­ŠŒŒ4ÝŒkF0àqÙ0+Ä,‹œN'¿ a¹ /«Õ3n›æß€[Áƒ8•€Çq:r:¦›Ãø…Ë=PøxÊ2Ïs âˆ9“Û“¢E‹ªGZ¹r¥öï߃[†‰#g@áÃr>ž²Ì{t0>|¸zôè‘ã´Y³fiüøñ²X,Z¾|¹J”(¡ÈÈHõêÕËU¦víÚš>}ºëßçÏŸ×ü¡>ø@¿ýö›kúܹs5nÜ8·ú/ýl¦Å‹kìØ±ªX±¢^xáÕ¯__’´mÛ6}ôÑG:zôh|s— òåË+444Çé|ðΜ9£wÞyç· p3¹R@  yt0_¿~½bbb$ɸ§M›&IÚµk—$©^½z*Q¢„âããU·n]•.]Z§Nr«'22RkÖ¬Q¥J•ôÐCéƒ>PëÖ­óÔ†;wjíÚµ®ÿñÇòõõÕ„ ª•+WÊjµªU«VªZµª:vì(‡Ãqß(Ür;brêÔ)92×Ïf}Å­‹#g@áSËý•úú àæà)Ë GóÍ›7kóæÍ’¤®]»J’&OžìV&3`Ïœ9STÛ¶mõÕW_¹•Ù½{·+ÐW©REU«V•ŸŸ_žÚ°k×®ló¬[·®J–,©uëÖiôèÑ®öÕ¨QC!!!:{ölþ¾(€<«Zµª† ¦eË–iÙ²eª_¿¾:wî,‹Å¢~øÁtópƒdþ¾ýö[U©REÕªUÓ4mÚ4%%%©I“&jРʗ/¯3gÎhÑ¢EÚµk—ÛçjÖ¬©2eÊhÁ‚Љ‰Q·nݢŋë矖$•+WNݺuÓm·Ý¦˜˜-]ºTÛ¶m3üíÂër˶¤+ö¹MÏ\7,_¾\5kÖTTT”¦L™’ë: U«VjÞ¼¹tàÀEDDhïÞ½WœÀ3꛿Y,µjÕJqqqúæ›o”žž®¶mÛf+¦:uê¨S§NªZµª.\¨¤¤¤<Í£zõêêÙ³§k¨P¡‚Nœ8¡óçÏëÞ{ïÕ°aÃT¯^=ÍŸ?_o¼ñ¡¸Š+¦Þ½{Ëßß_6lPÆ åããcºY¸Z·n­ÄÄD;wNµk×VË–-U¾|y=úè£JKKÓüùóåïﯾ}ûºý6ZµjåZ_wëÖM]ºtÑÁƒååå¥îÝ»ËÏÏO~~~2dˆÂ´lÙ2%''ë™gžQ¹råL}] PËmÙ¾R×þ¢eË–²ÛíÚ»wo®ë€Ê•+«K—.ŠŠŠÒ¬Y³ªîÝ»Ëb±ä: €çòè#æW’yäzÕªUŠ‹‹ÓîÝ»U«V-•+WNÇw•kݺµëÈúéÓ§µiÓ¦<Ï£~ýú®ëÈ%éäÉ“ŠˆˆÐСC5lØ0W`ß¿¿&L˜ Õ«WÜ«ZµjÉÛÛ[?ýô“–/_®ß~ûMÿøÇ?L7 7о}û4cÆ •.]ZcÆŒQ¹rå´téR 6L¾¾¾ W\\œÂÂÂT²dI×çvìØ¡Ù³gëÌ™3êܹ³.\¨ 6È××W 6TXX˜Ê•+§   ÍŸ?_ÿýïuôèQ 6LûÛßÜú7Fæ2˜Ó²]¾|ù\ûƒ¼ö{öìÑĉ%I 6¼ì: 22R’dµZe·Û5~üx¥¤¤Húë´Üœ¦ð\…:˜·iÓF’”––¦Ž;Ên·K’ÚµkçvúyæÍÝÊ”)£·ß~[ãÇWÏž=ó4œn 'I[¶lÑc=¦Ò¥K«E‹zöÙgõ¯ýK;wÖ±cÇ àÛ¸’bÅŠI’Nœ8!IúóÏ?•––f²I¸Á¢¢¢$IÑÑÑ’$›Í¦"EŠèÉ'ŸT5ät:]ÄYVÅÇÇK’ëì©Ìþ#11ÑU6,,LÒÅK•2/§’¤%J\ϯà2r[¶¯Ô䵿Ⱥ —Û:àСCZ¹r¥î»ï> :T)))Zµj•–.]šë4ž«ÐóÌÓØ%©mÛ¶n§°·mÛ6ÛuáÒÅ£Ý6lPݺuU»vmýþûïW5ïöíÛ«OŸ>š1c†/^¬Y³f©råÊêܹ³*UªD0®Qn7ÿÉœæt:'§Ó©2eÊhÛ¶m*Y²¤l67 óyýd$é¾ûîS:u4sæLmܸQ=ö˜š5kvÙÏ\nˆ‰‰‘ÓéÔ×_­M›6Éb±Èf³±ó¸Žr[îs[¶cccsí®4=§uInë‹Å¢uëÖé§Ÿ~Òm·Ý¦N:©C‡Ú²e‹Îœ9sÙi™;üÅS¶Ù m0¯S§ŽJ–,©_~ùE p½?þ|U­ZU+Vt½W£F õêÕK%K–Tûöí%]Im°ð|,÷nUÌ+V¬hº nÇ—µvù&%f¼ãÐ@^Y$§óâ«2^-¿À“±Ü…ÓÅp‹UÚÿ¦á¶\;æ•·_ RÓ37ÔPèXþz¦©ÅbaÛ( XîÂɃΎ!˜ð8‹õâŠÚƒVÖÈkƽSÊÜ¡ÀñÜ…“ÅCx‚9Ïc±p}a¡—qz‡Í€B„å(œQsX¯ÿîüãŠóàæy]éñ«ú\è¡ÙÜÀ3Øl6åûZðÌÏÙíö<…óFõª«ÇC÷kéÚÿªQý;®¶¹ÀUkÓ¸¾6nÛC0n°œÖÿ^^6x¦‹6lû]ã§,ЕÊéùžiÄ{ÓŸ !O>¤=‡Nè“KT»j½Ô«£†¼9Iq I—­S’íÐLÅCŠê•ñÓT,¸ˆ^êÕQgcìúù×]øhýy.VCÞúB•ˆkij]tèÄŸ:íÖÞ^ZÉÏÇGÃÞùÊ–,®}:éôÙ;}6×yð VÓ ¸•8|‹åkÈM÷îÝ|MíÉKyOPPæÌ™“ïiÀÕ ¼l(¯P¡‚ú÷ï¯ÇÏy‡˜ÅbQ```žægר¾ÖÁã^u[Q¸´lTO_üs°þ=f€Ú5½K’T$@3þõ’[¹ ¯ T™ð0 Д·^Ð}w×Ò¿_  ¯ rm4¿ûR/ Ð?÷ÐÃÍïɵ+§õùÒ%äëã­ù?nÔù ©Ú¾÷6ÿ¶W÷ÝSK6›U§ÎÄháÊMJHLÖæßöè\¬]eK†åZ§·——îoP[“ç¯P\B’ŽœˆÒæêÀ±Ó’¤²%ñ9Rö„$mß{XÇNŸS™¡nmõ÷õQÓ»jê«E«””¢½‡ŽkÕ–HµjT/×yðsCÚ·o¯"EŠ\÷: b>@Aóõõ½ìéëUªTQóæÍõ¿ÿý/×:l6›|}}¯8¯}‡O*!1ùªÚ‰ÂÇËfUµ ¥5äI7ù[unÓX5*ßvÅÏùùx«|™pøà+-ŒØ¬þÝÛÉË˦¿¿?Mñö$ýã³YZ²æ¿7àÈ”Óúßb±Èétºžy.IV›U¥‹‡ÈáH׿g-SBRŠ$)¬XÂB‚Ü‚pNu–-ªÄ¤5¨SUïè£F>«;kTv]6óߨ}Ó»¤{jWUX±"Úsè¸[%Ê)Ξ¨è8û_ó:rReKýµS€þ ðló|°Í×p9ãÇWÑ¢EõÖ[oé‘G‘$•*UJ¯¿þº¾þúk½÷Þ{ªV­š«|óæÍ5qâD}ñÅ5UGOžÑwþ¡{3®ÍÕjÑÒÕ¿(1)Y+7ý&I ºÞÍOGNF)ÍáPç6àç«¿Õ¬¢ÆõîP`€¿[9//›†>õZ´r‹RÎ_ȵΰbEVLwÜ^Nc?Ÿ­Of,Uç6uw­*’¤ù?nPÊåôÙ˜þÞ§“¦/\í ÿ™‚ƒ•˜â~sS{B²‚ƒòvv€[Á<BÍV‹¢¿+ôÐì<_ÎðáïѣGkÑ¢E²Ùl=z´Ö­[§§Ÿ~Z .Ôˆ#äçç§"EŠhÀ€z÷Ýw5xð`%''«~ýúÙêÈË|‚ƒƒÕ¡Cýç?ÿQïÞ½uüøqõèÑÃUÞÛÛ[Õ«W×ÀõöÛo«[·nªU«–[¹µÈ+/¯ËßÞâôéÓJII¹ìô¼ÖäÌýùÆ—^N‘ît*:.Áõï£'¢VìÊ;Í‘®X{¢$ÉáHWÊù òºÂM Üxiiýkòwª[½¢>{µ¿Z6ª«¥k~Qlü_˽ÅbÑ ÇPtl‚¾[¹éŠu&$&Ëjµè?óWÈž¬ƒÇNëûµ¿ªAÝj²Z,zkhO}·r³zúX#?œ®ÿkÑ@wռݭ{b’ü}}ÜÞ+è¯x;÷¦ ‚y>Ô«WÏõš—ñ¼ªZµª¬V«"""”žž® 6(%%EUªTÑ… ”ššª *ÈétjòäÉÚºuëUµ?..NÇמ={äïﯸ¸8U¨PÁ5Ýb±hΜ9JIIÑ‘#GôË/¿¨iÓ¦yn+ÜÌÎÆÄ»]+*IeÃCu&:Îõo«ÅâÄ+–+©s±v9Ò²Z-òËØpöõöV`@þwHT=®Ž¯·Šøiìg³ÕçÕOôÞ”ïT2¬˜øëtõ§i©bAúlÖ2·SÞ/çLLœä”{ÙŒ}~·—/­4GºVmÞ®óRuðØiýü¿ßÕ°nu·:þ<«Ðà +ú×òªJ»=E€g#˜çÃöíÛ]¯yÏ«ððp………éË/¿t ¾¾¾*V¬˜.\¸ qãÆ©mÛ¶š>}º ¤bÅr¿±Üåxyy©W¯^úôÓO5zôhU©REVë_?ôôtEGÿu‡ÐÇg;Õ=·¶ÀÍlõ/;ôäÃÍUóöÛT$Ð_õkTR—¶M´jËW§Ó©îí›ÊÇÛKåJ×ݵ«jÓ¶ÝJJ9¯ø„$µoz—ü|}ôPó{dµä­ ±'¨DHQIº¦z\»ôt§^ìÕQÜ·ü|Õ°n5Õ­^Qþwññe´j¨;n/§÷&§Ô´4·Ï¶oö7•*’­Î„¤mŽÜ«ž´¯·*– W‡fÓ/‘ûu.VE‹¨é]5]ÓÕ­¦#§¢ÜêLL>¯M¿íÑÓ[)ÐßWÕ*–QëFõ±%2×yðœš9 Ïm|u|Þꎎ֑#GôÊ+¯ä8}çÎ=z´‚‚‚ôÜsÏ©sçΚ2eJ¾Ûß´iSÕ¯__#FŒPrr²5j¤nݺ¹¦[­V………éìÙ‹å¨T©’[PÏK[¼HKK+ëÃÓ.Ùhr³líV9ÒÓÕ·[;……)êl¬æü°N?ÿºËU&)å‚ö:¡O_í/‡#]߭ؤß“$Mš»\Ïvm«öÍîÒ¢U[t.ËMšr³`Å&õéÒZ›·ïÕìe뮺×.5-Mï~9_}:·Ö£í›êè©3zû‹ù:!UÅ‚ÕãÁûåp¤ëË7†¸>3kÙZ-_÷«Ú7½Kñ I:}6&[½SD¨OçÖšðÚ %$%kÁÊMÚºk¿$éý© ôøƒ÷©o·¶JHJÑÚÿîÔòu¿Êj±¸Õ9yþ =Û­­>ÕOq IúbþO:r"*[9ž‰`žÛ·oW½zõ\Gï8^©æe늎ŽV‰%tâÄ íÝ»WE‹UóæÍµnÝ:UªTIƒ Òk¯½¦€€3FcÇŽUbb¢RRRäãã“­Ž¼ÌÇf³)==]V«UzðÁÝÊ:N=öØcúâ‹/T²dI5hÐ@ï¿ÿ¾[™ÜÚš /RSS $˜_¸û y²Ú¾ç¶ï9tÍóÄ­Ëétê‡u¿ê‡u¿æ8Ýž¤>£?–$­Üœý¬§m»ê¹7&ºþµž'G¸¯+¾>Á5¾%rŸ¶DîËS= Þ¥ëÿƒÇNëÕgd+kOÔ£/þë²õ }çËËÖiOHÒÇÓçø¹]ûæ8¿Kë<ŸšªÏZ–­LºÓ™ë¼x‚y>äóùóç«oß¾Ú´i“f̘¡·ÞzK}ûöUïÞ½uòäIÍŸ?_ JHHÐ?þ¨1cÆ(44T»wïÖÔ©Ss¬ãJó™;w®êVËz IDATÖ­«‰'êäɓڼy³Û5äIIIÚ·oŸ&Nœ¨´´4Í›7O;wîTPÐ_×[¦¦¦^¶­@^?>×G¦å…ÃáÈW0nV–+É×g-¹¼^:nÑÅkÜ­—Œ[%Ù²Œ{IòÎxõÉü%ùe ïtêÔÉýÖá×At¥Çzhv¾Ž˜g~æF˜?~¶÷f̘¡… Þùùe³Ù”í®Øyát:e·Ûåp8²M[¿~½ªvù‡’’¸“-@aðÛôWvI))%cH–t!cH“”šñšž18²Œ§ëâc[²ŽgÊa<§×¬®|×ÈpÄ<¢+=~ñ(xÆ)êy¿QºvízCç\+‡Ã!»Ý®ÀÀÀ|9w8JLLÌ1”·"‚yݨ#ß@aâp8/___y{{ËËË+Ç#èN§Siiiºp᧯ÀãÌwþüy?Þt3#æ<ŽcÛ ùšnGVÓ  0#˜`Áƒ<âóÇ›nW…#æ\µk×NV+]*¸:lEðxeË–ÕǬU«ViæÌ™jÔ¨‘é&Á€Õ«WkãÆÚ¸q£-Z¤·ÞzK¥J•ÊÓgƒƒƒµnݺ§…‡‡«wïÞ*R¤HA6@hܸ±~üñGMŸ>Ýõ^ùòåõÉ'Ÿ(""B3fÌÐ=÷Üãš–—þ"§:­V«^xá-]ºTK—.U¯^½\ÓJ•*¥?üP«V­Ò¼yóÔ¦M›Ûêãã£Ñ£Gkùòåš9s¦î¿ÿþËѧž‰`ÀãýóŸÿÔÔ±cGM™2Eï¼óŽBBBL7 <þøãº÷Þ{Õ·o_:tHÓ¦MShhè5Õyüøq=öØcŠ/ V(-Z´ÐðáÃ5{öl×{^^^?~¼"##õÐCé“O>Ño¼¡âÅ‹Kºr‘S’4`À•*UJ={öÔСCõðë}ûö’¤Ñ£G+**J:uÒøñãõüCåË—ÏÖÞ—^zIêÖ­›Þ}÷]5J•+WÎVŽ> ðLsÍf³éèÑ£š:uªâã㡨¨(U¬XÑtÓ`PTT”þóŸÿhݺunG¶Ê–-«Ï>ûL+V¬ÐÔ©SU«V-·ÏýßÿýŸ~øá-\¸P]»v•”ýhúÃ?¬éÓ§kõêÕš0a‚kƒ?88X+V¬P‡´páB-Y²D­Zµºþ_(¤Îœ9£Þ½{kÏž=®÷ªV­*Mž}úèÎ;ït«¯X±bêÖ­›Æ¯öíÛëÈ‘#0`€kz@@€ªV­ªž={ꫯ¾Ò¨Q£äåå÷an:;wîÌv&‹ÅbQzzºœN§ë=«ÕªråÊå©¿È©Î2eÊ(>>^Í›7×ìÙ³5wî\Ý{ï½:räˆ$iݺuêÖ­›Š/®ûï¿_áááÚ¾}»[eË–ULLŒÎž=ëzoÇŽªT©’[9ú4ÀsÌÞÞÞzûí·õÕW_)99Ùtsp8{ö¬ÂÃÃ%Iµk×–ÍfÓ’%K”žž®ˆˆ%%%©fÍš’.nÐùå—JIIÑ´víÚl×ŠÆÆÆê©§žRdd¤­Ûo¿Ý5ÝjµjÆŒ²ÛíZ°`$¹æàúûã?”––¦^½z)00PM›6U«V­T´hQ·rùé/ÂÃÃU¦LÕ¯__ÔØ±cÕ»wo5mÚT’ôå—_ª~ýúZ¼x±Æ§>úȬ3…„„d{/>>>×SÔéÓÏÂnz…‚Åbј1c¥iÓ¦™nnaaaŠŠŠ’$•.]ZáááZ¼x±[™ÌkÐÓÓÓÝŽfýñǺ÷Þ{ÝÊzyyiРAjÒ¤‰’’’'›ÍæšžššªèèhI|%&&ÊÛÛûº|7Ù¥¦¦jøðá1b„zôè¡ß~ûM3gÎt]r"å¿¿ˆ————ƧäädÅÆÆjΜ9jÑ¢…6nܨ)S¦hêÔ©Z±b…*V¬¨W_}Uv»]6lpÕ›í’AAAŠÍqžôi€ç!˜(†ªÐÐP 6ÌíFn­[·ÖÎ;%] ð<œÊÀã=õÔSª_¿¾FŒ¡ÔÔTÓÍÁM T©RêׯŸî»ï>M:U’©àà`uèÐAV«UwÜq‡¦OŸî:ÅÕétª_¿~òññQ¥J•tß}÷iÅŠnõÚl69Y­Vª{÷î7ü»¸¼´´4½ûî»zì±Ç¨æÍ›«aÆ®e9·þ¢[·n*[¶l¶:ív»V¯^­¡C‡Êßß_U«VU÷îݵzõjƒ¿$¿Œá;ï¼Óýy6 ­ãÇçøÜWx¦-[¶ì’4RRJÆ,éBÆ&)5ã5=cpdO—ä¼dÍ›7×ðáÃ5oÞ<õìÙSÿþ÷¿Õ©S'=õÔS®2¯½öšŽ=ªgžyFÆ S©R¥4hРëÞ6  4kÖLC† Ñüùó]ïyyyéÍ7ßÔ®]»Ô½{wMš4I¯¾úªBCC%I£Frõ_ýµÆŽ«bÅŠåZ§$õéÓG%K–T¿~ý4räHuèÐA­[·–$ >\gÏžÕ“O>©O?ýT#FŒÈ±úè#ÅÆÆêàÁƒzùå—µwï^IR… ´lÙ2ÅÇÇkëÖ­:räH¶>( @-[¶Ô矮„„íÚµKßÿ}¶3yèÓÏE0àч~úé'¥¦¦ÊÇÇG-[¶TXX˜"##M7 7ÕjÕ[o½¥ˆˆuîÜYsçÎÕØ±cåïr~~~ Ó³Ï>«˜˜}ùå—úþûïÕ»wo•(QBíÛ·ÏS=þþþª\¹²  Ù³g륗^’———  ˜˜ :TóæÍSpp°:vì¨O?ýT]»vÕ±cÇÔ»woW{U®\9õë×O{÷îÕš5kÔ¸qcÙl6IR5d±X´cÇ·ïYºtijË–-nïŸ8qB‡VµjÕ”ššªmÛ¶iôèѪ[·®¬V«¢££³Ö ܬvïÞ-»ÝîöžÅb‘Óé”Óét½gµZU¶lY97N ’¤âÅ‹+<<\üñG®u–*UJv»]M›6ÕäÉ“5uêT5hÐ@ÇŽ“$mذA;vTXX˜š4i¢%Jä¸LÆÆÆêܹs®÷~ÿýwU¨PÁ­}à¹æ …Ò¥KkÉ’%9r¤þõ¯)11Ñt“pÕ¨QCV«UË—/—ÓéÔÚµk•œœ¬êի竜ÅbÑÂ… e·Û¡¸¸8ýòË/Љ‰Ñ† T¶lÙ<ÕcµZõÍ7ßÈn·kéÒ¥’.†€KÅÅÅiÀ€Úµk—£Ê•+»¦;NM™2EgΜQZZš:¤èèhÕ«WOÒÅÓn׬YãB$)<<\gΜÉñouæÌ…‡‡K’FŽ©õë×»vôéÓGEŠÉ÷߸Y8p@iiizâ‰' FéþûïWPP[9///3F³fÍRrrr®u/^\¥J•R:uôâ‹/êwÞÑO<¡ÆK’¾úê+Õ©SG³gÏÖ믿® &¸Â¦bÅŠe üv»Ýí4ú¬èÓÏÃÍß §NÒ< ZµjiÈ!²Z­Ú¸q£éfá)Y²¤J”(¡Ù³g»½’¯riii®Ÿ9¥¤¤¸Ê¤¦¦Êb±ä©žÔÔTÅÄĸêILL”··w¶v{yyé™gžQ£F”œœ¬¸¸8×ÑðÌö\º1¿fÍ5kÖLÿûßÿÔ¬Y3½õÖ[Ùꊊr©âÅ‹»B{ZZš–.]ª¥K—ªbÅŠzê©§4räH=:ÇÏ7»´´4½úê«zá…ÔµkWíØ±CóæÍs]c.]Ü7bÄ={Öu·Ü$$$ÈËËKü±k9ýöÛoÕ¬Y3mÞ¼YŸ}ö™fΜ©Õ«W«|ùòzùå—e·ÛÝÎX‰‹‹S`` [½AAA—½ $}àyæ…‡‡ë®»îÒòåË%I‡ÖäÉ“5iÒ¤<·¸Ùøùù)((H/¾ø¢ë½áÇë÷ßwý{àÀ ѨQ£²m’“S§N)==]ééé®÷2wÒÝqÇJKKÓ?ü IÚ·oŸV®\©fÍš¹óS§N),,L¡¡¡ŠŽŽ–tñÌ›£GºÍ‹> ð\œÊÀ£Y,½ñÆêر£T½zuµlÙR{öì1Ý4Ü@»víRpp°Ú´i#‹Å¢jÕªiÒ¤IÙN_Ík¹‚š_NÎ;ç:•Üf³ÉápÈb±( @:uºâç;¦˜˜uíÚõ²7jKOOפI“4bÄ5iÒDÁÁÁª[·®þùÏjÁ‚ŠŽŽÖùóç5hÐ =üðà v1¿ôÚXàVâp84vìXuéÒEjÚ´©þö·¿iÕªU’¤Ç{LuêÔÑk¯½¦ÔÔT·ÏvìØQeÊ”ÉVgBB‚Ö­[§ÊÏÏO·ß~»:uꤟþY§NRHHˆZ¶léšvß}÷éСCnu&&&jíÚµ8p U£F =øàƒúþûïÝÊѧž‹#惿$¿Œá;ï¼³Ö5|äøñãÙ 6wß}·ž{î9·;¸à©"""vI))%cH–t!cH“”šñšž18²Œ§Kr^2ž9(‡ñœ^³ºò509àTv?þñ㡇[~È!‡ÄŠ+âÝï~wºÆÁ Ñ×ׇzhêḟzhôõõ¥nFKìµ×^qòÉ'Gg§ïĘ™Ú ë4"“6%§v7c§SÑ\7ÜpC²6ì·ß~qã7Æá‡^¸~Ö¬Y1{öì· f–9sæÄÂ… cÖ¬Yñýï?FG[óá 'œW\qEôõõÅÑG=nÝìÙ³ãñÇ{?00O=õT\}õÕñÊ+¯´¤}ÍÐÑÑ ,ˆíÛ·Çš5kbÆ -9îñÇW]uU¬_¿>Î:ë¬=Ö?öØcÑÛÛ;îgùå—Çš5k*î÷K_úR¬^½:6oÞ\¸~îܹñÅ/~1üñ˜ÜIÀ#ëTÖì¯íkù‹v¢ÛL«ŠzWWר?ÔuëÖÅÒ¥KãøÀØúuëÖÅyçk×®M×H˜æ8à€8í´Ó¢··7:::ZvÜ|ä#qå•Wƃ>Xq»«®º*>ö±Å7¾ñxÛÛÞßþö·[ÔÂæéèèˆÞÞÞ8í´ÓbþüùM?Þ‰'ž—\rIüä'?©¸Ý¢E‹âØc{T ågžyfÅêÿ¿þõ¯8ãŒ3„rfœf‰æÆFm3aíÚŸnZ…îZ,Z´(?üðøç?ÿŸýìgãˆøûßÿwÝuWœ{î¹ñì³Ï¦n&L[x`,\¸0zzzZ~ì8ûì³ãᇮ¸ÝË/¿ëÖ­‹'Ÿ|2V®\Ç{lÌš5+""N?ýôX¹re<ñıbÅŠqã´Ž<òÈXµjU<ðÀqñÅǵ×^K—.ˆ]Çnºé¦xì±ÇbÕªUqÌ1Ç4ïD+èéé‰SN9%>øà¦gÆ qî¹çÆ3Ïùd\z饱`Á‚xÿûßÏ?ÿ|twwÇu×]O<ñD\yå•qÊ)§Ä5×\§vZÙîØuÖYgžûî[q›îîî8ùä“ãþûïuëÖ5ôø%þóŸ'õù½÷Þ;ÞñŽwÄYg'Ÿ|r\vÙeñàƒÆÙgŸ¿þõ¯ãüóÏuëÖE___ì³Ï>ñ–·¼%>ùÉOÆ«¯¾ûì³ÏØ~:;;cùòå±bÅŠX¼xq|èCŠeË–Åé§Ÿ===ñ­o}+Î;ï¼X·n]\tÑEqÜqÇÅoûÛÉž>$Ѭ3e3âTæMéÆ^S^my«ÆœqÄñ»ßý®âvûî»olÛ¶-^{íµV4 f„N8aP^NµpÙLûí·_xà±ÿþûÇÙgŸk×®í۷dž bÁ‚1oÞ¼X¿~ýX%÷ØcýöÛ/n¸á†xá…ƺŠED¼÷½ï9sæÄòåËcË–-qóÍ7ǧ>õ©xßûÞ÷Ýw_CÛ^ëuëîîŽN8¡iÁ¼V·ß~û¸1æ'žxbDì Ô+V¬ˆ-[¶Äm·ÝK–,‰¹sçÆ‹/¾X¸Ÿë®».¶lÙ²Çò£Ž:*ºººâŽ;ˆûï¿?.¸à‚x×»ÞO?ýtlß¾}¬»ßw¿ûÝ&œ!´N‹³Î”ÝnÁ¼èÞsù‹Øöu"FFFªn3{öìX³fM¬_¿>Î8㌴ f†Gy$,X]]]U·Ý´iS ZTì²Ë.‹ˆˆ-[¶Äþð‡¸úê«#bçlß_ûÚ×âƒü` ÆæÍ›Çfþž7o^lݺ5^xá…ˆˆŠ¿ýío±³û~wwwüêW¿wœ8 ámß´iSMá|xx8y䑆¿^‹-Úã˾¾¾ŒW_}5"v¶uëÖ­e»™ †òˆ×xîܹqï½÷Ž[¾ï¾ûÆŽ;âë_ÿz,^¼8.½ôÒèïï믿~ì¸0Õ$È:•2d[Þï¼Ý‚yËä+á©geî¹çâ¨£ŽŠãŽ;.xàÂmŽ?þø˜={vüûßÿnqë`zûÇ?þkÖ¬‰SN9e\ȺñÆ[6+{-.¼ðÂÂîÌ .Œ… Æ9çœÏ?ÿ||üã /¼0""^}õÕxÝë^sçΗ_~9"vW¯7n܃ƒƒqÒI'• RÔý¿££cÜp¡¡¡¸÷Þ{ãùçŸoj[ÚÁÆãÙgŸë½·víÚX»vmôõõÅå—_ŸûÜçâ{ßû^‹[ !ëT×®“¿•“ÿ ¹úW/SDDD|õ«_-œÕ·¯¯/.ºè¢ˆˆ=*,Àä½øâ‹q÷ÝwÇàà`ê¦Ô­§§'†‡‡ctt4ÞùÎwޝõÇ?þ1þóŸÿÄùçŸp@œsÎ9c³Ÿ¯]»6bñâÅ1oÞ¼8餓¢¿¿?æÍ›×òsŒ{î¹gJ‡ò 6Ô|íž~úéxãß§žzjtvvÆG«V­Š¾¾¾8ðÀã¿øEÌ™3'vìØÿûßÿ¢···É­€æiQÖÉgÃö©®Ô ]‚yµ‹6ã»dßO «W¯Ž§Ÿ~::è X¹reœxâ‰ñú׿>Þð†7Ä‚ båÊ•1þüxæ™gâöÛoOÝ\˜–^z饸óÎ;cÛ¶mmU)¯æ—¿üeüõ¯;î¸#¾óª ÄÒ¥Kã˜cމŸýìgqðÁÍ þÚk¯ÅW¾ò•8ì°Ãâ¶Ûn‹OúÓqã7Æúõë[ÖöÑÑÑØ¶m[ÜyçcÝíÛÁí·ßO=õÔØ£–Éi~ô£Å7¿ùÍX²dIÕmwìØK–,‰~ô£ñ›ßü&.¹ä’øáñÒK/ÅêÕ«ã†nˆþþþØ{ï½ãúë¯oÄi@-Ì:ù¬XKnl‹?ú&s£Þ¢Ïv¼î(x]ztf^wšºÍ’­„7¥«y³Mfò·ÉœP¹ Üj©ˆg—M›YÙ˜°l6¬%—«°O6çNHŠYÙ'Ò=?Ê©§‡uò!Óíx»´¢Û¢å¿¹ÉmÀ̔͆ùÊy¹YÖóŸMª]‚y‘|Ï_ıpÞÑ1™»¾5V;µfªvúØNmi¤v:¯vj LÑÑ.ìM¯´7óviõÜ»¼#·l$"º¢øBŽÄøp>:88===1kÖ¬F´{†‡‡cpp0i€¿š¯t^®1ÐÆåÃ(ž“¬Ü-ÕJë’ÞÓ|²¥Ž¢Ïw¼Î>wäÞwf–ufÞwÆÎp^zžˆØk×cÖ®çå¹Ï”;NѲ¢ç¢ó*w lØ©\p­¥;y¥ÓEË"Æñ%±#"¶ïzÞƒ1;»¹džóA¾(ÌO¤â>áàž*˜g_gƒy6œ—–wïz] æÝ±3”—BzöuOì ñ¥ ß•y”ö™u™çÎÌûÈ´!b|‹Î£Ök0•U ßEAº4 9;$y8ÆâáÌóЮm†bw ά+½ŒÝ|{îõPìæ#»ž³<ßå=û¾è<òçÞÐ`ÞÌ®ìåÔÓŽô:±†cgX.]àÈì3ÿ­GéÙ•û\gÁ#ÿÅ@d–—Ž‘ åÕ:ÀtUiô¢Û˜åƒñHÁc¸àuQ8Œñá»´>´ë[ÞòÙÛSó¼ìIçÇšgŸ‹~Xƒ1>ÄΪy)xwŸóm(×Þ¤ZÌËUÉóËó?Àl¼´¬ôƒ(è1>¼Çî®êݱ;pçƒxþÑ;˜Ù ^-˜Gç•Ægól—ö¢ªy>ˆÆîJy¶B^ªšg+êùj|¶•Bz¥ójªfól . ÞåÖå·ÉþÐJÝʳ¡¼#·Ýh쮈—fuŠ=yéu¶BÞ•Ù_WÔÊ…s`¦ª4q[þ}é1\ð:[A/êΞïÒž­œçùânјñrçQ´M½Ýáë2Ù`^ËxñZ>WËI—~PÅ¡¼Ì»c÷˜ò|E¼\µ<ȳc̳Ëò*sa˜n*MzV´.Šó¯å»³Wož}Ÿ._EÏŽ5Ï·¯èQíüj1©°Þ.cÌË…ØRµ¼ômGgŒÿ%b÷ ûƒÍ'/[^4¦¼Z7öˆâŠy”y0]• µE®•ëÎ^4æ¼h¬y~ÜyéýPìÚË£Öóh¹Vólõlwöˆ=«çÙîëÙ÷Ù ZºØ¥ Ý®Ô}$³®Ø;3¯‡bÏÛ£åoÝQÐóíÊ€™¦Z÷ï|µ¼ÒXó¢Êy¶0›îåž³÷$/w[´¢væÏ£e½YÁ¼ž±ä¥×%•ªç¥pœ¿ù{~»R`س[{¾R>œ[VîQÔ6Á˜Éj—]® y~¬y¥ÙÚ#öœ .ØGÊì«R»Ëòzα!ZÝ•½\Õ¼ÚmÒ²÷ÏV¾ó3ì•‚w~Û‘ß]}8ö¬Ž×2é[þu–`Ì4åÆœuk¯ÌóóJcÏ+U×ó]äóUóJãÊ[^-H?ƼR·öì…ȇó¢.í¥×ÙIÚò¿#óÙl0/u}ÏŽ7¨\1W-(_Q. ä¥÷ÙŠvQ¥»(|½Ïß­Ü~ŠªãM¯„×*õ}ÌKòcÊKÊUÒ³½ôùÑ̲¢ ž ÝÙ Þãï‹Q>›ô `¼J]ØóÏÙ@\TÉÎwe/ Úùpž¯¸WªŒç—Wš®èÜš¢Á¼\è®¶¼–níÙÀ1¾›zv¦öÒgóÇÉír]Û³½Ð#ö¬œgŸó¯£†åÓE=ã±óEÖ¢e£¹õÙç¢.ê#¹}ÍÀžìõ´³Ú¹Õ²¼f)fe¯¶>_1/º`Ùp^ àÙIáF£xlyvÙ®óÙ1¾Ÿ%˜ÔÌóëóÁ9?‹zÄøìåfZÏ﫨 }þ}%-ëÞÞ¨Yi?ÕÆeç.·,ßݼôº3÷º#·¼Ò>òÇË®+j³±å{ªe w¾{vÛJ]Ü‹*ä‘[^é6iåz¥jyµ/jYW“FUÌ«UÃ+mW©K{¶ª½Àù âF3˳Ýßó·NËÏÚ^ô@¶‹C>¸g—Ô€™¢Ö®ÝµŽùÎWÓó»RèÎï¯hy¾m•*絆í†TÕSÎÊ^.Ìçƒzé’í^žíªžÕ™ûl6l—¶Ï.«4É›‰Þ&¦(„—ž‹ªÔåBuÑxñl=¿M~ {¾2_Ô¶rmn™F†ÌZ»³çßçp¹®äE]ÝËuk/zÎî£è8ù÷åÚ­Z°S¥[.œg_é¢ÏM Wz®â£à¹hº¢v½¯u]Í&Ϋݦ¬Üôˆâ±ãåöe–WS^î\Ø©\×ðJÝÈ+­¯§š^î}¹}æÛÛòP‘¶+{‘ì‰å»³çghÏ~&;¦™û’' å­ œ çÙeõTÄË){@ëÝ×<«ÖŠz¹mÛ2”G´O0¯¶]­½–㩤ӈ \Kµ¼–}ÕÛݾ)Z@ë9N½½hy£fSÐc2á¶ÑÝÓëiKSCyDkƒg£ÂùD×› =Õ®'{;³¶ å]­8HF½!¸ÑÝÎ…p€©¡ÜŒêå¶mÄ6“Ù~ÂRÕ‰³•·3Þš«¡·™ãÃ[Ê#Ò†Ðc¿…n€©a¢á¸QcÙ[&uPìñÝþÔ×`¦htžìþ’„òˆö ¢lG»œÍÑÈ,—´cˆm×™âhžVääa<«ƒi;· €©§­yÉT ¿S¥´—¶ ãYS5ðNÕvÐ\mÄó¦[Ànç@±)ÀËéLÝÆü?Óúˆ0óÍMQIEND®B`‚ellie-commons-sequeler-9963fb4/data/assets/screenshots/database-light.png000066400000000000000000001133011512323162700266030ustar00rootroot00000000000000‰PNG  IHDRææÏŽ“sBIT|dˆ IDATxœìÝw|uþøñ×öôF* )Ê‚TQÁ.ÊqÞyœ ½Ãzêˆ_å°ð¿6õ‡E¤XD@j€$IHÙl›ùývÙ„ÝôdSÞÏÇc»;3û™ÏÌÎÎÎ{> „B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!DK¥ñu|¬­o¿B!„B4ª¯3à+­=0míÛ'„B!„mE« Ü[[àÚÚ¶G!„B!„g­&PoÉlKλB!„Bˆ†×"ƒõ–ܶ´ü !„B!„𤷔@×ùl)ûF!„B!Z _ËÍ>@oîÁgC对o§B!„BÏ*°n¶zs X뛯æº]B!„B!ê§¾v³ Л[[×ü4õç„B!„B4¬ºÌMý¹לӺ䥦ŸiNÛ)„B!„¢æj@×%ÐnÁys Xk›ê–¯Ïv5—}"„B!„­U}âê>[Û´}œ7‡ ´6yh¨€¼9l·B!„Bˆ‹5T ymnŸç¾ P* o¬Òs Þ…B!„¢a5V{ðªæ7ûÝWÁgC”lû"XB!„BѸ+o̶êõÒœsoË4ÔôÚäE!„B!Dã©k0ÞPÓk»LƒòEPZ× ¼6wm>_Ó4…B!„BÔ_}«–×tZm—­í2 ¦©І Ê+O«o0_¸ !„B!„gõ jëd×7¯í2 ¢)̺T)¯K@®ñ0½±t!„B!„ £&¹êaZMÞ×fZmæ7ˆ¦ L"(¯î½¶iV7]!„B!DãªO ¹RÍüºìµ™_oÍ50¯ÍûʹÖËržJÒ«Z‡B!„BˆÆU]Pî©´.È/ËÕå½·¼4š¦F2(÷k¨xWÂkÒ½&ó„B!„BÔ_m†5«¤«^^ƒ÷½Yç¾Ì"(׺ÍÓº-ë)P¯I¾$0B!„BˆÆUÛêëžqÅmš{@ÞÁy‹Ì:(w²Ýƒp÷à\ç¶œ§jíÒ)œB!„BøN];yS¸˜;Üæ+xÖ««_“÷5W/úÆJ¸žê”ë# D~ççե͹æB!„BÑ8ªê€­ª6å PœNVÊt-‚sçk[·´Ü_7€Öµ´¼ªàYCÅÒpç³OJJê¶jÕª›†ëõúö”êB!„B!Z>«Ýn?yâĉï&Nœ¸"++ë ع˜»—ª{j›N5¯=½¯é¼:ky}‚rÝùGä¬Y³†<÷ÜsÏ)Н( ŠR¹“>!„B!„-™V«E«Õ¢Óé²þùÏ>¶dÉ’­@å%ç&8o5y}KË=U3w/!w>ëÿ:\ºsçÎ×ìv{‚ª6»Z B!„B!F£A¯×göë×ï/'OžÜ ˜)Ì+—œ{ê®.mÏk:¯N*ÞÔjÒTlSî|ï,1ûì³Ïnp8” !„B!D ª*Š¢tøâ‹/¦q\èÜSìèMMãÑF×ÔyM6Ö[©yå«£¼myDll쩺.„B!„m‡Ãá 66v(Nyl¨;?«rp^UÍloš4P÷e‰yMª°Wn_î̯{‰yV«MhÄ| !„B!„h†t:] ˆ‹KÌ1cMbM<¼nR1\ZmÇ¯éÆ»—˜;KËu€NUU?©Æ.„B!„m‹ªª~\ˆ ñ­sœóšæm¹ÚN¯3_•˜W5v¸·ªëÎi•çëB!„BÑV9cÂÊ5®ª«ÚîÎ'¥æ¾îü­:žª²W®ž „B!„¢m«\…Ý[Uöf©¡ÛšTW¯MÛòÊÓÜw¬³J{³ÞÁB!„B!•³ÿ1÷’qoAymÛš×·Iv4çgOUœÓ+?„B!\ xî¹çØ·oŸ¯³"„¢ñU#VŽ%›¥Æèü­¦*ïow*¼µ ¼³ÛíQRR‚ÕjÅn·c·Ûq8èt:ôz=:“ÉDPPAAAèõ{È6×|ÕVkÙÑ:mÞ¼™Õ«W“••EXX#FŒà†nÀh4ú:kyçwˆŒŒäÚk¯­õgoºé&bccY¸paƒ¤ûÖ[oñÅ_xœ7qâDfΜYë<Ö$/-õû*..æðáÃäååù:[BÑ ã“^Å›ú*¼¦ë=íP÷*ìÍ¢K{_Ù²e 6›í¢évèt¾RUUÎ?;ß«¨ªÂ5W_Ù$ùôÄb±pêÔ)JKK #<<ôz=Z­®¼ß‡ÃÃáÀn·c6›)..&''‡ÀÀ@¢££1™Lm"_mu;DëõÉ'ŸðÞ{ïÁ!CHKKcåÊ•dffòÈ#ø:{ùüóÏéÞ½{s(¿Xj¨t‡ BTT~ø!Ó§O K—.uÊ_uyiÉßWbb"ü1‹Åã¦B´6›¢¢"ÂÃÃÑh4œ8q‚3f ÕjQUEQX¹r%)))¨ªJ~~>ÁÁÁ _g½)U޵€‚çÂ\OÁwM§5š¦Ìk8WU"îÞé›{gpÚò€³í —æp8¸á†.šþÝ÷[tÙ@4ç÷šs¿8‡Â×ë7øl_•””pêÔ)BBB‰Œ,¿¸T…’’Ò ùÐh4®‡V«%44ŒÐÐ0JJŠ9yò$QQQ¶ê|µÕí­WAA+W®$**Š%K–€F£áÞ{ïeëÖ­dff’ÀÑ£GyóÍ7IOO§]»v\wÝu\uÕUìÛ·yóæqçw²oß>~ÿýwzôèÁý÷ßÏñãǽΠªfdd$Ó§OgèСæ…„„0yòd®¹æfΜ‰Ãá`ß¾}Lš4‰Ï>û¬Êt¶mÛÆÛo¿ªªÜxã®í®|έ.]÷mv×§Oúõë” €ë¿ÀáppèÐ!¯yûüóÏùòË/)..¦gÏžLœ8‘¾}ûzÌKkù¾ž{î9æÍ›ÇM7ÝÄM7ÝT§|5Øñ/„uQ\\ÌÎ;‰ŠŠâÈ‘#tìØÑUR^RR€¿¿?§OŸæØ±cøûû“——Ç€ÚÄyìüÿ¬–‹;{Órqi8\\j^¤7ôPc5)ý®üÚÛ ï•{ÒÓzx€ø|ðm)0?vìÝ»wÇáp (Šëqìx:Äcµ\¨ºìþÐét¼¼<¾úê+ºvíʰaÃØ¼y3 Ì™3‡ððp¯é(ŠÂ¼yóPU•믿žü‘œœÂÃÃ/ °“““+¤êu›;tèàúœ¢(®Ú.Î*í×^{-‡ƒ’’¯yËÉÉáÅ_¤GÜzë­lÛ¶;wrÕUWÑ¥K— yiß¾}«ù¾L&6là’K.¡cÇŽuÊgŸ>}šæÇ!„³cÇÆŒC¯^½P…Ó§O3dÈL&6› UUÑét´oßžôôt¹ì²Ëˆå‡~ 22²Y6=jH†—^zéSà$`£<€®üpò6&¹Ï5dçou)¯éxæî¥åN•ŠÅ¡M›.*WÅáÀ¡¸=ŠâpÝaó‡ÃAQq1¥f3æ²²Z=JÍfŠŠ‹±;4š†ýÚ›k¾ÚêvˆÖéÌ™3DDDT(EÖh4b4ùùçŸ9wî×_=“'OæþûïàÛo¿u-ß¿xàæÍ›ÀñãÇ«œ÷óÏ?SXXÈ”)S>|83gÎDQ~üñG×ú&OžÌ”)SxüñÇ™={6ñññôë×FChh(ƒ®2_ý›ÍÆõ×_ÏÔ©S¹ÿþû½žo=¥[Ý6W§ª¼9ûްÙl²hÑ"–-[†V«½(/­éûª¼ê“O!„hj6›;v0jÔ(ÂÃÃ1›ÍtíÚ•áÇHzz:iii¤¥¥‘žžN`` #FŒ k×®˜ÍfÂÂÂ=z4;wîl+Íyj3Ö&­ézDS¶1¯.ÓÕUcwŸ^—Ö*åæbþzGé8lX…yŠr!8wëîUÙOóS§N‘œÜ…²²2Ê,–ZW©×h4øù™0 def˜˜ØªóU[­e;Dë ”WµsWZZJii)ÁÁÁ®Žº:tè€Õj¥]»v˜L¦ Ÿ‰‹‹Ãl6 àêÔÐÛ<çg/^ÌâÅ‹]ËæææºúSHLLÄb±Èĉ]µKœl6[­Ò‰ŒŒôÚ¶¯rº5ÙæêT•·îÝ»sã7òùçŸóü&NœÈôéÓ/Ê‹»–þ}¹«o>…¢©Jdd$f³EQ°Ûí…¢±%%%‘••E·nÝ8~ü8v»¾}ûVèÄÊc???úôéÃÈÌÌ$%%…Ó§O»nZ6W³fÍâ§Ÿ~Âl67DrU ¿­*W…ªMÉy£kŽ¥ÍUåÉ=Hoà<77—#GŽðÄOPPP@AAO<ñGŽ!77·>I7»ÅBê{ïaY¾œÁ 0æžÆv:ÝÙ|¾=»Â#oÿ~mË/´1W|Z•½¼ã P~Ñh4X,VΜ9Ñ#éìØ±ƒuë¾æ«¯Ö³cÇNŽIçÌ™<,+ q݈pvfÖÚóÕV·C´^ªª2uêTæÎKDDÛ¶mC¯×sÇwðàƒ¢( ~~~,X°€ÄÄD>üðCòóó]Y]2þ|¢££yÿý÷ÉÌÌäŽ;î`äȑַråJΞ=Ëßþö7 ÀŸÿügÚµkÇòåËq8^Ó cÞ¼y±~ýzÆŽëªí‰{ºV«µÞÛ\Õ6Ž;–Ûo¿ƒòòË/£Õjyê©§h×®ÝEy9wîœ+Í–þ}¹oKcäS!KZZëÖ­cëÖ­¤¤¤`±XÈÍÍ¥cÇŽ®e8ÀæÍ›Ù¼y3pMïØ±#¹¹¹”••‘’’ÂÖ­[Y·niii>Ø’ªòÈ#`6›/ªPžª±WW6+ ÙF»¦=²{ëÜÍùÚ½ú{·÷úó¯uç_``VVÖÛu 8m6<òGuµ©ÍÈÈ S§NÌŸ?ß§ãÿ™óóÙ·t)í Gb"œ;‡jµ¢‹‰smèØ•A7Ý€Ù\qx,UQ]wÒ¾^¿‘ë'×m<Þú:pàûö¥FJJ íÚµ£°°°Â£  ÐÕyû#$$˜³gó8pà……çèÓ§·« MkÍW[ÝÑú L&Z­EQ°ÙlX,×|N‡ŸŸ:]y¿V««ÕŠ^¯'00Ðm !!!®¼Í+--½(M÷uºÏSUÕ5šA弡Õj½¦c0ðóóÀb±`2™PUÕcÓêÒun³7Π¿¨¨Èë~sÏ›ÉdÂh4¢ÑhP…²²2W›ìÊy©\«¥~_f³™€€×:ê’O÷vBÑTÖ®]ËÔ©SÑëõ®žØsss‰E¯×sèÐ!l6ýúõCUUvíÚ…Ñh$%%»ÝNnn.ÑÑÑDEE¡Õjq8|ôÑGŒ?Þ×›VÁܹs9tè;vä…^àí·ßfÛ¶m,[¶¬VéhµZîv¥€°S^B®œ­ží ïU·÷î¯==W~]Õ´ZkUÙ½©®Ç¼)17¼ð <òÈ#¤§§åÊÌŸ?£ÑèÓ¶f{ßz‹ˆ;éÚ©ÖœSp¾#[F–ÇåñQŠC©Ðé[ÅŽà|Wb^ZZÊСCظq#¿ý¶‹ÄÄDÂÃ#0 Ølv×P~丸‹¥Œ¬¬LΞÍ#33“¸¸8FÍÉ“'[}¾ÚêvˆÖÏ9ì–7Îá¿*³ÛíºÞ«ªZá}Uó¼¥YݼÊy­Í²UÖµI×÷€¼&iX,– ÁtUy©íüæü}Õ$Íêò)„MÍ9šóÆ®sT UUÑjµdggsÅW¸jÂöêÕ‹ï¾ûŽîÝ»£ª*8×ÍEçg››Î;£ÕjyöÙg1 Ì™3‡ûî»ÏëÿU5<úz›ßüvÍ/0¯¼=UI¨”×+0WU•ÒÒÒ «ªª”””ø´´ ÿ=÷°Çlæ`ê~’"#Q-VPt¡¡—·Ûç;óÜ+»âpœooìøû0nÜU¨ªÂáÇ9v칹幗VFüüü "66–N:1jÔ( |Ÿ†¼hª}¾ü $*:Ž2‹ƒÐðXº¦ô ??Ÿ‚ß]Ì5×ý+„B!jNUUW3TÀÕa¯ó½Ý^^à¢Óé\ï#I(Š‚N§sÕ\±¯X­V×Xê………<ûì³$&&2wî\t:%%%¨ªŠÙl®Ï½žbĪzgÇÃ{ŸjªÀ¼ªžñ¼-ãmø´ÊÁy½òÄO¸ª¯Cy¯­O>ù$ÿú׿õ7cX—ýóŸì^ú&{7|KJX8›{©™­§rp„…¢ÑhÑjµh4o·zíüMQUŠâÓÀ8ßæ9ðð0.¹¤=zô(ï”NUÑj5®›!6›­<¯xoçÉ*ÙÆw»T¬6k—‡_ç“|žã‡­¿€Åbeøð~lÛ¶½^‡¹ÌBqq AA š¿†ÞçþÕh4hµZŒFƒ«ó·²2‹Œc.„Bá#›Í†¿¿¿k˜4çõ½¢(ÄÇÇóÛo¿qÉ%—ðÛo¿‘€¢(®Òv“ÉäjÚSU ®¦0kÖ,È­·ÞÊ“O>IFF†«ÉQe pÁ[A®·NÞjÒ\“ð ˜ûâ*¾Aôgžy¦B›rÀÕæü™gžáÅ_l€¬Öªª ×ÓÿÞ?³?!ž]ï}@w£&EÁÊàEÿÅd2áçç‡V«å› ›q( Žó?JgÛò mÍ(>¬Ên·Û)++sµ»Ôh4”•Yªl‚Y=ÍCÓþŒV£EQž{ka…ñj›*_ ÁbS¸ìÒþ”–š ð'¹sGÌæ2JJJ ૯72å×yê QÕeÿ:îÍ6,–²Ý¿B!„¢æzôèÁ§Ÿ~Š¢( :”¨¨(ŒF#6›²²2ºwïNZZ›7oÊ{oïÖ­f³ÙÕ¯”Á`àĉüôÓOh4zöìé³í9wî7ntõ¾Þ©S'ž}öÙ†^MƒÞÖaÝõÜ›{UöÊÓ|g'$$ ÓéxöÙg]U,æÏŸÏc=F\\\C®ªNTUÅ®ª$_{-~ññì]ô* Ï¡˜* ‘ œ/ ÷:\š¢âpøv¸´äädvìØApp½zõªñçUáhé&¬`$Œs)ûtnò|i4 ×é(**fè˰X,”••Òµ3&“‰Ÿ¶í ,<¬Éƒr¨ûþu²Z­=šNQQ—]vY#äP!„BT'%%…Þ½{“››Ëž={ˆŽŽÆh4¢×ë)))¡´´”nݺѻwoWg•Š¢¸:Õh4¤¥¥1bÄbbb°Z­>/x1›ÍøùùñüóÏ7E_^žJÊ=-Ó&ª²×54ñ|{zïÞc{ýóŸÿD«ÕºÚ6@y‡p¯½öŠ¢4›Y1½{ãÿäãlš÷AZ«½ \ÎC£yÇ\õmUöÂÂBFÍæÍ›Y¹rqq퉊ŠÂßßEQq8ì®’Þõ'?„ü´Z Æ`fG)¥‡ÖHp´–¥¿=Aàá B íùëÈÇ›$_v‡Š¢€ŸŸ‰’’NœÈæÇŸ~AQ†ûñíã0™Œ”–”’¶ÿ=º7m¯æµÙ¿Ù+WPXR‚F«Alöò^’ýýü eÏš5 Âо=#{¬I·CQµÂÂBöîÝË©S§ ¤S§N¤¤¤å¼}öÙg¤¦¦2oÞ<ŒF#ßÿ=»ví`ìØ±ôìÙ“­[·²gÏ üÿãôéÓ<ñÄ®uüþûïüðà 2ÄU]Ò]UËxʇBˆšq¶!ß³g!!!®êìþþþ˜L& /êÌR¯×»†Á,--E«Õ–_ÓíÙÃСC›M3Ų²2^}õUî¿ÿþ†ÎSUñ¡§êëP· ¼Ñ‚ùæTb^ÕÐjîÓ/ Üg]xê¡UUU=Þú’N§ÃápOèô›HÐj1 ®áb <ß6« £ÁH™Å‚á ªJÅÎßο÷…òÎÉü9rcÇŽåСC=z”}ûNPXX€ÙlvÝÉ;ÛåÏÿù1tÚò6ô‡J6P¦”¢jMüeâìòqvþoõ'õÞžšæ«gï 6˜Ž;`³ÙøqëvÚ·&.6–m?ÿÊÄ ãèÚµ3ƒü™îݺ4À^køíH9~œû­V‹V«©pbt/»Ï>®ÿþ¢¥KOOç×_u•R\uÕUlÚ´ EQ˜8q"Û·o'99™ž={¢( ‹-büøñ:tˆk¯-žrÑ¢EüíoÃáp°zõj 1 L™2“ÉÄÆIKKCUU®½öZ:uêDzz:Û¶mãܹs >œ^½zqàÀ~ù宸â .½ôRJKKÙ³giiiLœ8‘mÛ¶Ñ·o_N:å ¸÷íÛÇ_ÿúWÊÊÊxýõ×éÞ½;C† aÈ!ìß¿Ÿ}ûö¹~ëf³™M›6qÏ=÷ ÕjYºt)ÉÉÉ^è;£ºe*çCÎ#BQ;yyy˜Íf†ŠÅbquNH||8WUgí 58X.¦…8/77—{ï½—]»v±~ýzþô§?±{÷n¶oßNŸ>}رc={öäèÑ£tìØ½Þóßkzz:‡ƒÛo¿cÇŽqîÜ9JKKÉÉÉáÞ{兩¸˜eË–1gÎNŸ>ÍìÙ³1™LX,¾ûî;î¼óN8ÀöíÛ‰‰‰q5»JMMeøðáh46lØ@DDwÝu½^Édº¨„bË–-L™2ÅõþèÍ:[  IDATÑ£¤¤¤`2™èÞ½;GŽ¡oß¾5^¦r>„BÔNHH6›ŒŒ Ú·oïêmÝl6SZZŠÉdr]×™Íf \ú:´Z-Øl6BBB|º-K—.uÅ1p¡´¯3½òzŠ#«ëàÍ[/îª9•˜{R]›ó6ËYuÝ]ß>=ÉÈ8Áƒé˜LÚÇň^§£¬¬ EñÝpiåmàJKK\wǪꜬ°ìñÓ…•÷ÚèȧԞG€>‚ ]ŠFÅîp ¨§š,_þF~ýu7eeetî”È€þ½Ø±s7—샢(I?NFÆ F^¿ÖˆÛ¡Ñh°žCMê„.,t*4ŠWU4ŠŠ¢8PÍ5WYˆÖ,11FCdd$±±±h4bcc9tèIII¬^½‡ÃAjjª«ÍŸ'ñññ|ùå—¬_¿žÉ÷ßÏÙ³gY¾|9ÅÅÅ®žj;wîì ~Oœ8Arr2§OŸf÷îÝ\wÝulݺ•œœz÷îÍÖ­[/êÜG{¾ÖÀçŸÎСC+Ìß¿?ÑÑÑDFFº¦U.Å r•ÀÔt™æReR!Z*ƒÁÀèÑ£ùöÛoq8ÄÇdzk×. éܹ3 ®š¿:ެ¬,ÒÓÓ å’K.!33“ýû÷3fÌŸ]ù?¤‰4û6å•5÷Àª.Q÷UÏ{>ç©j ^¯§sç$’’8y2‡ÃGŽâ°;ˆŽ‰¤]D8V‹Õ'¥¹P~q8pà@>ÿüsÌf3={ötµ‘/î­buj“=œ5_¤a0Ðø—0xhf»ÕQÆêo¾'Ü/ƒÁ@d@b“åË ×bw@i©NGd»vŒ3Ü•ŽN§£´ÔŒ¿¿ÝR’]Õ‹šBm÷¯-,ŒSÇ 7 7èÑëõØm6JJK±X,DFFb0ðK¬ßþ¢µp·pqЩÑhèÒ¥ GŽ!##ƒ &pôèÑ ç[çø²Ìž=›={öðá‡rÍ5×`0œ'‰Êß¡V«EEeþºp¦$Ã5=&¨Ñ8CxU—¯ò»å¥Î{Ocó–qÅPúöé‰F£¥´´ÄgMÜóY“ý å5(v»]:{¢ŽÌf3o½õùË_õÂgóæÍ1~üø Ãe¶Á‹-!„hõœçv×Kç¯å´ZíE…lÎvç|÷fŒ­ýúN«ÕÒ¡C‡?;3`l€pœ(nÏêù‡âöŒÛtªx®üºªiµÒ\s÷GåÝS`n¤<8fddü¯¯¡¦Ò_-íÇéïï_áF‚ÃáhÕ«M&~~~@y¢¦lS.„h>²³³ùâ‹/1bÝ»woôõíÙ³‡½{÷¢ÓéP…àà`Uß…B´^•c‚–v}ß´Z-‰‰‰³)ÌK)Ê­xÌ+䪇UΕ-›ÅbáÈ‘#äää×¢‚.9'4½µk×#AL#REQ(..æŠ+®ðuvZ5EQp8|ÿý÷Œ9Ò×ÙiµZòÿŒBÔE›ÌUU¥  €b4¥šŸõd4INNfçÎÄÆÆºª¶rNhzªªâïïOppp‹9NZçͦ¢¢"Š‹‹åxnDÎ}­(Šë½h-ùF!ê¢U_8ÿ0EÁn·c4}œ#!Z£ÑˆÝnoQ¨rNð–pl´²Ÿ›Ž´åo-ñF!êªUæ žB4¶–ökiùBˆ¶NÎÛBˆ¶ ÕæB!„B!Ds&¹B!„BáC­¾ó7!D󓓓Ê+øùçŸ)(( ,,Œ?üáÜtÓMÄÆÆú:{mݺµÆÃªéõz†ÚÈ9j;^XWÄé’òûÈSöV¹¬N§ã²Ë.kŠl Ñ ~þùg,K­>c02dH#åH!„/H`.„hR;wîäé§Ÿ&99™Ûn»ØØX²³³Y¿~=³fÍâ©§žbÀ€¾ÎæE¬V+cÇŽ­Ñ²6lhäÜ´-§J4LŸÀ¤.ݪ\ö£>jŠ,µxG¥³å»Íäå©vÙví"qÅH:uìÜ9k{, #FŒ@§ÓÕø3ß|óM#æH!„/H`.„h2999<ýôÓLž<™;ï¼Ó5ôMÿþý¹æškxë­·xúé§Y²d 111>ÎmEÎ1¢G•Ëét:W¢a¨*l9®g†‘QÅ^—“}_s[¾ÛÌðaWÐ%¹«×eÒ3 8¶|·¹Yæ‹…Õ«Wsíµ×âïïïëìÔ‰¢(µêÜìäo»ñ[¾=_í¡ËÜ[h×®‘s(„¢)HóóÞzë-òóó›<§Ÿ~šO>ù¤ÁÒ.,,äŠ+®¨U„h*+V¬ 99¹BPî¤Ñh˜9s&;vdÅŠ>Ê¡w΋fç´·‡û²UÉÎÎæÑGeܸq\sÍ5<ýôÓ¸æ¿ñÆ8p Q¶¥1ÓnªŠÃ¡âp”0©©©¤¥¥qøðaÒÒÒØ³g6›íü¢5 n¶mÛÆ#<ÂôéÓ¹÷Þ{YµjUƒõ|ðGŽi6éx“—w†Ø¸Xò ó¼>rsrèÚ©;6«­F%ëf³™Áƒ»W^y%<ðYYYÕ~öĉ <˜ŒŒŒj—u?~srrX¶l'Nœ¨~£›)‡Ãá}É’%|ú駬^½š/¾ø‚O>ù„O?ý”×_U«V‘•žÆ7¯®¤ÿ%—Ò¥;ûŸy»Ê´7oÞÌÝwßÍèÑ£¹å–[X±b…ôn.„Í””˜Ÿ·jÕ*®¼òJÂÃÃ}š†/Ò¢©üüóÏÜ~ûíåN†«®ºŠ>ø ‰sV=ç…ó]+ûU¹ÜÿMßS£ïÁ$00'žx«ÕÊâÅ‹yöÙgyñÅøä“OHJJ¢[·ª«n×Ec¦ÝTì‡CEQ¬V+z½ÞU{A«Õb±X05 :¾ýö[^{í5&OžÌ´iÓ8xð ü1Üu×]õÊëÚµkIHH 99¹Y¤S»ÝNΩ“^çë z~ض™èÈòÚ+ÿóò 5ªÖþÈ#0`À xå•WxôÑGyÿý÷,ßîÇoRRk×®m°´}ÁynÑh4Ue…Ù¼øìúˆ¬¬,ºuëÆ¿þõ/¢¢¢<æÏÛ²N«W¯fñâÅFn¹ån¸á†*×ám» C•ûB´L›6mâ矮v¹?üáŒ5ªÁÖ[XXXá8õ$&&¦ÞµWƒóâ`ü˜¾ìÚ{œþ}’\¯×~»Çµ\Nn±1ž«˜ž={–ôôt^~ùeWN ìÞ½€‰'RTTÄSO=Å?þÈìÙ³™2e >ø ï½÷úÓŸèׯS¦Lá£>"11€+¯¼’¹sçrå•WrìØ1,X@ZZÑÑÑÌ™3‡!C†xMÛS:={ö¼h½}úôaþüù¤¥¥Ï<@ÿþýuß«*çKÌËsƒÁ€Åb!22’¸¸8×rîß‘76›wß}—o¼‘›nº €ÄÊ•+™>}:þþþdeeñÆopøðabbb¸í¶Û0`999Ìž=›‡~˜+VŸŸÏ¤I“˜:u*3gΤ¤¤„—_~™_~ù…‡zˆ'Nð¿ÿû¿>|˜ØØXî¾ûnzõêUëtƒÁ` wwï7›~ßÿ±±íøã ¬Qµöèèh’’’HJJbÚ´i<þøã”––@FFFŽŸÕ«W³jÕ*Ž=J×®]™7o;v¬öøu?îÛ·oÏ_þò† ‰'˜2e Ï=÷o¾ù&yyy̘1ƒ;Ï>ûŒwÞy‡ÒÒR.»ì2æÎKHHH=önÍ9KÌ5 o¿ý6AAA¡Ñhp8è•Ø÷_æÝ݃_ö}À¿kY}èg®¼oºÇ4­V+¯½öwÝuwß}7ƒ "..ŽüãÜpà hµÚ*Ï!Þ¾+ç¾t?/9r„mÛ¶±|ùr ü·8aÂî¸ãn¼ñÆ&Ø‹BÑòIUvàÝwß%<<œ%K–0cÆ Eáàꫯ櫯¾âæ›oæÑG¥´´”sçÎñüóÏó /ðñÇÄöíÛ/JÃ›ÍÆÃ?̤I“øúë¯9r$›6m ??Ÿ>úˆ‡zˆuëÖ‘””Äo¼á1U-ë\Ïž={Xµjÿó?ÿòeËØµkW•Ÿó¶]Uí Ñrmܸ‘Ï>û¬ÚÇÆt½aaaœ:uªÊerss›]ûr BUõµßîaïþ,Ö~»§Âkçr¥f6móšVXXqqq,]º”mÛ¶a·ÛIIIaêÔ©|øá‡ñè£2oÞ<×ç¾þúk~øa\e^­V+÷ß?ÑÑѼõÖ[Œ;–'Ÿ|’3gÎxM»*Îõ^zé¥Ì™3‡ÄÄDÞÿ}FŽÉܹsýFŠªª8ì {yàÝ¥KzõêELLŒ+¯i;ݬ¬, =zt…é&Là½÷ÞÃßß›ÍÆ¿þõ/ÚµkÇ‚ 5jÏ=÷'O^(]þöÛo™={6£Fbùòåœ8q‚W_}•€€þüç?sß}÷áp8xú駉gáÂ… <˜ÿûßÖ*Æ¢ÓÖ¬³1çrµ©Öåÿ+7n¤C‡`·Ûktüœ:uŠ%K–0iÒ$Þ{ï=‚ƒƒ]5Iª:~ÝûeË–1~üxzè!233]ˬY³†¹sçrÍ5×ðÆo‘‘Avv6óçÏçÎ;ïäwÞ૯¾ªÑ66÷cøöÛogÊ”)L™2…«®ºŠqãÆ1zØ@ÔßÿËÕSºCa—v=ÍÞÍËýè­Äöéë1ÍãÇ“ŸŸÏµ×^[aúˆ#`ïÞªG7¨Éwå~>š0aéé餧§åµ£ŠŠŠ7n\=÷ŽB´˜{ðûï¿ãp8˜0aZ­–±cÇâççGZZ~~~˜L&> Àý÷ßÏå—_^ãtËÊʘ4iz½ž1cÆÐ£GÂÃÃy÷ÝwéÛ·/%%%DDDxm_XݲªªrÏ=÷àççGrr2W\qëׯ¯òsÞ¶«ª}!Z®¹sç’’’Rå2ÉÉÉ ^R7hÐ ¾þúk¯Á“ªª|ýõ× 4¨A×Ûœ_’á Oþ™›ûýƒÅ“®ð:Ép§Nç“}º{ÄiµZÞxã RRRxøá‡?~<‹/vlh4üüüðóós}nÖ¬Y >œvÕtö´sçN²³³™5k:uâî»ïæµ×^#""ÂkÚUq®÷رcœ9s†?ÿùÏ´oßžÛn» FÃŽ;j”N}8Š«ùîݻٷo©©©®Gii)ªªV[b~æLyPYÕ>Ü»w/§NbÆŒ$$$0iÒ$ÂÃÃ]7R®»î:zõêÅÍ7ߌV«%##×¾5™LìÝ»—³gÏrË-·Ô)SÐh4‚¢š¤ÓX´šš]8—ûaÛfŒFcµË?øàƒ <˜qãÆ±ÿ~žyæ ü¸¬ÉñÍêÕ«™ûŒ7ß|“µŸ}ÈW ÆsÍ”nPxüCؾöÑú£ ˆðšfNN€ÇJQQQ®ùÞÔä»r?uîÜ™îÝ»³~ýzÖ¯_ϰaà «Ë.Bˆ6©MUe¯®$ÅYÚ’Í©S§¸îºë*Ì?{ö,ƒÿüç?,]º”ùóç3nÜ8þô§?Q! OrsséÚµk…¼ÄÄÄ ª*6›Å‹óã?@XXv»½BZδív»×eUUE«ÕéúlJJ [·n­rÞ¶«ª}!È´\AAA¼üòËüå/áØ±cÍïСÿýï iÐïù¦›nbÖ¬Y¼õÖ[Ìœ9³B[sUUyóÍ7IMMmÔRBwµÙ6÷RÙOw¾ àzv¾ÖÙÙöËïŒñ~úå÷*ÓŠŠâ‘Gá¯ý+ßÿ=Ë–-cÇŽ¼ùæ›å±òùÂ=ïžÎ9999ëš×¥K—‹¶¹r‡u•Ó©¼Þ“'Ob·Û™0aÂEëkÌóªªØåEQÐét¨ªŠ^¯Çf³a³Ù\=²W—ÈÈHòòòˆŽŽö¸ÌéÓ§ ¨0¿sçή pÍsˆžzëÏÍÍÅáppçw^”¾óû¨I:µÕXßEXX˜«Z»§u8§Í;—²hÑ"òóóéÖ­[µÇó&µªªX,^yå6oÞŒÁ` ,,Ìãw[ùøõtܧ¤¤T8>ãââPU???üýý±Ûí„……ñÔSO±dÉ–-[ÆÀ™3gŽëÿÚÓ:kÓÑcuœ7“TUå¶ÛnsM·•œeË«×sÝ­}áÜIðeÛ—©y믱X,^×ï¬utúôibcc+ÌËÍÍ%!!¡Êß~M¾+÷óÀµ×^ËŠ+¸ãŽ;زe ÿú׿ä:A!j¡Mæ5Õ®];ºtéÂ[o½åqþÀ8p ………<÷Üs¼÷Þ{Ì™3§Fé8pUU]INN—\r 6là§Ÿ~bÙ²e°e˯ë¯nYEQ8}ú´ë‚ïÀDEEUû9OÛ5lذ*÷…h¹"""X´h‘ëŒSLL ‹-ª¶T¶.bccyê©§xúé§Ù»w/ãÆ#..Î5Žyjj*Ï?ÿ< ,hV:KcUUåºKfðÅo0±ßÍ|ñÛ\žx§}ÍåcûTuItVVÛ¶mcâĉrõÕWÄÃ?̹sçjÔ¶U¯/?}çç瓘˜Haa!%%%@y°W\\LNNŽë¢<55•””×çj’Ne‘‘‘ V¯^ÝdíoáâÎß, ®’FNGVVÉÉÉÕ ³yóæ ¥¢kÖ¬aÅŠ,]º”ÈÈHJKK9uê”ë>ÞkšIII„††²víZîºë.V¬XÁ?þÈäÉ“)++£GUþökú]¹»òÊ+Y´hŸ|ò þþþ®þ3„BÔŒTe?/22Òu¡Ô§O øê«¯P…ýû÷sÛm·qîÜ9²³³¹é¦›8}ú4F£ÊÊÊ.JÓ¾}ûb2™øüóÏQ…M›6qðàA ¼=—^¯GQJJJøè£¼æ¯ºe5 K–,ÁjµrôèQ¾ÿþ{®¼òÊ*?çm»ªÚ¢å‹ŠŠâ•W^q•"FEEñúë¯_TÂÒ À’%Kèܹ3Ë—/ç±Çã“O>¡G,^¼˜Ž;rüøñ&i»\î%æó×Î%íänæ¯Ëüµs9”‘Îg›¾bØà®*×UQU•—_~™W_}•Ó§OsôèQ¾üòK¢¢¢\ÁÑÑÑ8p B{dwQQQóþûï³wï^/^ìºÐ8p ÑÑѼùæ›dffòî»ïrÏ=÷¸ÚH»§]U:• 0€–.]Ê©S§Ø¸q#“'O&77·®»µFÊÛ˜«®6æ½{÷¦sçήê³Ýºu#!!¡F¿ n½õVV®\Éûï¿Ï®]»X¹r%|ð£GÆßߟ>}úÉŠ+ÈÎÎfÍš5äåå1räÈjóÉ‘#G(**¢OŸ>³|ùrΜ9Ã?þÈ=÷ÜÃéÓ§k•NcJNJ©öᮦÕß¡ü¿´oß¾¼ûnyÍ’š?Άƒ^4¤¨·ß†ûqŸ••ÅG}ÄéÓ§« ÌwíÚŘ1cøé§Ÿ0  †&-éuoc~óÍ7sÕUW1âÒN\rÝ_ñKÁ¾]ylû2 ¿á/a O 66–€€¯£[Fî½÷^–-[Æo¼A§N8~ü8O<ñ·Ür Uþöëò[ åòË/çí·ßæšk®A«•KL!„¨ )1?ïŽ;îàÅ_dôèÑÌž=›—^z‰_|‘… ’˜˜ÈwÞIHH!!!\ýõÌ™3‡¼¼<úöíËßÿþwiTf4yá…¥±û IDAT˜?>¯½öC† aìØ±Œ7ŽíÛ·óÇ?þ‘:0räH¾ùæù»ë®»ª\6((ˆÞ½{sýõ×£×ë¹óÎ;éß¿?½zõòú¹¸¸8Ûe4½î Ñ:ÄÇdzhÑ"Þ~ûmî¾ûnÚ·oßè댉‰ñZËdÁ‚Ì;—£Gòàƒòâ‹/ºšŠø’³ÄüÁqÿ®0=ïì9~ÝsˆËôF§ÑòÝÖ\=¦êÎÙ:tèÀc=Æ¢E‹øøãèØ±#ÿùÏ\ËÌœ9“Å‹“™™é:ǸÓjµüóŸÿ䥗^bÞ¼yÜ}÷Ýlݺ“ÉÄÂ… Y°`·ß~;QQQ<ûì³®ž—ÝÓ^°`×t* `áÂ…¼ôÒK̘1ƒ¤¤$î¹çžFאָ¼ÄüB¯ì{öìA¯×WL:vìXã¦ãÆ#((ˆU«V±fÍ"""¸ñÆ™4iP~®~òÉ'ùßÿý_xࢣ£yôÑGIHH¨¶¤{Ú´i¼ÿþûdgg3oÞ<ž|òI–.]Ê}÷ÝGBBÓ§O¯QßÊé4†E¯.l”tÝÝzë­<üðÃìß¿ŸîÝ»{=~ÜKaÇÏ÷ßÏ´iÓHLLdĈ¬ZµÊ5ßÛo£òqÇóÏ?ORRR•ãœ÷ë×;×_“'OÒ«W/þñ4ÎñÀ½Ä|ùòå´k×õä7LýÓ]X‹UŽæëþñ)„‡‡»zj¯îXŸ8q¢+ðþ裈‰‰ÁjµºªèWu©ê·^Õ¾3f ›7o¾¨Ó9!„Õó~»µþéh<¼öô¬áBɽÖí½óYwþYþµ0ž6}Ξ={¡¡§ç…´Ýn'--aÆÕaÓêÆÓºfÏžÍ-·ÜÒdy¢±ýðî*‘Z­¶ÊœÚÈÏÏgîܹ;vŒ”””ZU)ýé§Ÿ¼V¡¬Ï9áÓO?åòË/Çf³¹¦å=Ç®½‡è×§':­†»S±Ûí\5z0ß~·ƒÛg\WEŠš †fq󡱬]»–®]»\§cä¯ï ‰nO¾Yáÿ&³{÷nWû`›Í†Á` ..Žèèh¾üòKÆß[Ñ|9ësçÎqæÌ™Zÿ×½´pûëß9rü`µË&'¥°èÕ…<ð÷‡ëšÝS¥Ù•ººŸC¶nÝÚ ÃI®\¹’+¯¼®¼™€ÝneÒUWpÿ-ƒIêsí/!22²BÇ{ëÖ­cêÔ©®ÏÔÔ®]»X½z5<òHƒw,xîÜ9,X@~~>¯¾újƒ¥ÛXÿ3BˆÖ%""â6`/`ì€õü³ãü³rþµ¨•žq{ï¼ëéí¹ò몦Պ”˜7’~øÁ×Y¢Å ç…^à±ÇóZ­º©9/ÈU¥Ïæ±kï!zwOÁá°³c×~Åq¾4«êêÔNZ­¶Y ×ܨªêj"à^í×ù]˜L&,K:ÞU®¶îkÍ-(o,î%æ»O×nFo¨Ø¾{3 »Ý^§uõïßßã¸ñõuöìY&L˜@bb" ,hðô…¢-hW¼BQIxxx“u¾TŠ¢`2™0™LœÉ+doêQz¤¤‚^«åÊQCÑé´èt:JJŠ}ÝVEU!2@Kd€–   *‡¨¬®¹ð¬)ªµ Ïœ7™œ¹NotM÷¦ª`|!""‚7ÖxF!„“À\!j@¯×³aÃÊ,ÎZQ3yy—Õh42~ojªáı,þßÿû±Êe›K ‹–¤)ª¥ ït:«W¯®ÕgœÕº› Êÿ?{wgs½øqü}Ιf;³XF£lQ2–’ il¡"d­,QÉJrÓ-qKã¦l©Û‚ºZlÙ×rÕÏ.î“e˜a6c˜åœßÌÉiƘÑðáÌëùxx|¿çûýœÏ÷sÆù~?çý]à¯á @ûöíM7¡Øz­ýÅ;9ò¿n¸ÑtëÖÍt×ëkw+Å ÁƒŠM0·ÙlÊÈÈ0Ý ÀcdddúQ=róøkÌ-‹,‹üüü´ÿ~Ýzë­EþìN ¸9wîœbbbäçççZÇn49;ë.~60àúÁ`ʼnGs‹Å"§Ó)«ÕªR¥J)!!A[¶láq:À_dµZåçç§Ò¥K»î |£„svÖ™“––vÃ|On$N§Ó­_ão|u]¼3’¿õÕã ;€ 0<:˜Kt þþþ²X,JOOwý€¹žž Ür~Y­VùúúÞp?˜ØYg†ÅbÑdµZo˜ïÊ$ç™Ö‡CZ·né&y¬‹ÿÖ‹EkÖ¬¹î[æ)näÀp%ŠE0ÏÙ ûûûË××—@üE9ëÕÅÃ;뮜ï„ÍfSݺuo¸ïÉÆáp(;;[ÇWvv¶$¾ÏWƒÅbq…r§ÓéÚžð·.:7ú`¸RÌ¥?BDΑ2:P௹ø4ÎíÇ;뮜ïGff&Áü*Ë9Šê:ª‹«'çïËwú깑wÀ•(Á\’Û^m6îÀ_w#¯G쬻vr¶½7ò÷åFpqxáû Op#ï€+Ql‚y6î$vÖ]+üm¯N«¾vr¾×ü­¯.¶Š“bÌàbüðƒ§á;}íð·n% €As "˜`G\cžššjº \æÁÁÁ¦›à:ÂÎ:ÜH<"˜ÀÅÊ—/oº 0Èétê¿ÿý¯î½÷^ÓMp°Þ¸ÑÌxž-\¼99¾@1ÂzàFÇÍßÃétºþ(Xïx‚9Ì0ˆ`€AsÅJrr²Æ§½{÷šn ÉÃïÊ>yòdÍ›7/Ïy:uÒ€ät:Õ¥K%$$(""B'Nt•Ù³gž{î9×ë%J¨J•*zæ™gT«V-×üöíÛëùçŸw«ÿÏïÍñÐCièСŠÕ”)S´cÇY,ÕªUKO?ý´n¾ùæ"úôò’––¦ƒêäÉ“yÎæ™gT¶lY9ò· p=¹\@ (yt0¿ï¾û$IúòË/%Iݺu“$U¯^]’´k×.%$$(00P»víÒñãÇæVODD„î¿ÿ~:tHË–-Ó믿®ùóç¨ wÜq‡6lèz]¹re;wNC† Qrr²"##åp8´nÝ:íß¿__|ñ…l6Û_þìò®qãÆ™nàâÑÁüî»ïÖÝwß-IZ¸p¡$©GneÖ¬Y#éüôÿûßZµj•ºvíêV¦Zµj®i¿ýö›8 sçΨ ·ß~{®eæì hذ¡†.IúöÛoµoß>%%%©T©R…ü¤ jïÞ½=z´Ú·o¯öíÛëçŸÖìÙ³%ImÛ¶5Ü:\+9߃.]ºhß¾}úõ×_U­Z5õïß_Z³f6nܨƒ*,,L;wV­Zµ\ïëÚµ«vìØ¡#GލsçÎ*Uª”fÍš¥S§N©cÇŽjÚ´©$)66V3gÎÔ¡C‡TªT)uèÐAõêÕ3üéâëR붤ËöùÍÏÙ6´k×NÛ·oWÙ²e5`À€|·‹/ÖŠ+”––¦Ûn»M­ZµR5.;€g*Öט;N­Y³Fjß¾½¬V«V¯^«Ü©S§´{÷n}ÿý÷:pà€¢¢¢äëë[ eÄÄÄhîܹ®‡ÖM7ݤ%JhóæÍú裴k×.µmÛV/½ô¡¸†õÑGéÌ™3ŠŒŒÔúõë•‘‘aºY¸†–.]ªÀÀ@•)SFÛ·o×?ü ƒê‹/¾———ºwï®ôôtM˜0Áí»±téR•)SF’4kÖ,Í™3GU«VUff¦f̘¡ôôt¥§§ëÝwßUBB‚Ú·o¯’%Kêƒ>Ðï¿ÿnêãÅZ~ëöåúƒ‚öK–,‘ÝnW5òÝÄÄÄhΜ9*W®œzõ꥓'OjæÌ™r:ùÎà¹<úˆùåìÞ½[ zà¨jÕªiïÞ½:zô¨ÂÃÃ]åÖ®]«µk×J’Ê–-[¨£;wîÔÎ;]¯oºé&=ðÀzë­·ôᇺ{•*UÔ«W/5jÔ¨è> €|mÛ¶M™™™zøá‡Õ¶m[Ý}÷ÝzõÕWM7 ×PõêÕÕ§O9rDÇסC‡Ô¡C}üñÇJOO׉'¤øøxÅÅŹÞW§NõêÕK‹-ÒܹsÕ¤I5nÜXgÏžÕÆ• ØØX¥¤¤¨[·njР*W®¬Ñ£Gë§Ÿ~Ò-·ÜbðSÅS¥J•.¹n8p ßþ  ýE54xð`IÒ† .¹ ¸ë®»$IYYY²Ûí>|¸ë Åb¹ä<ž«XóœÓؽ¼¼´hÑ"H’V­ZåvúyÎÍÝâââôÖ[oiĈš55õ’ëöåúƒËÍÏYn¥J•\ãùmªT©¢V­ZiÕªUŠŽŽV‰%ôÐC©}ûöùÎ๊m0Ï9]:ÄW­Zåš÷ç`ž£\¹rº÷Þ{µk×.íÙ³G·ß~û-{åÊ•š9s¦:wzH:uRll¬¾ûî;:tˆ`\#ÁÁÁ’¤#Gލ^½z:v옲²² · ¦­\¹R[·nUïÞ½õÀèóÏ?Ïó2§Ë •$õíÛW5’ÓéTvv¶¼¼Šm× •ߺ}¹þ  ýÅÅ;òÛ8N5kÖL­[·Ö¡C‡ôÕW_iáÂ…jРʖ-{Éy¾A1ÏQlìÞ½[ñññª[·®Þ}÷]×ô>}úèÀŠuMûßÿþ§Ù³gëĉZ¹r¥¤ó7„ûóü 4¸ä¼Š+ê¶ÛnÓÑ£G5qâDmݺU‡Ck×®•¯¯¯ënñ®¾ÚµkËÛÛ[?üðƒ¬V«ë( Š·ììlIç¯)]»v­6oÞ|EõÔ©SGþþþZ¸p¡Î;§ƒjãÆêׯŸêׯ_”MPù­Û—뮤¿Èo­iÓ¦©^½zªW¯žœN§l6›¼½½µqãÆKÎ๊m0Ϲf<22ÒmzãÆuðàA­ZµJ÷Þ{¯¤ówQßµk—l6›ÂÃÃÕ¯_?EDDhÏž=nós„……©\¹ryÎkÑ¢…þþ÷¿ëwÞѧŸ~ª 6Èb±(""B}úôqí]põ…††êé§ŸÖìÙ³µzõjµk×NÇŽ3Ý,Ö¼ys8qB?üðƒÊ—/¯FiÙ²e…®Çn·kÈ!úòË/õÕW_)<<\:tpõ-®­üÖíËõWÒ_ä· °X,JHHÐÚµkµuëV…‡‡kàÀ UÆ /9€ç*ªCCyÕcÉc<¯¡EÜÞzÑ뜡íÂÐ븗$Ÿ CoIµ’““?/’Oà†·~ýzµhÑÂt3`ˆÓé”ÃáЖ-[tß}÷™n€k€õ€Ï’vHÊ””%)ãÂ0ûÂÐqaÜ!Éù§¡.zs=Ê¥†ÏoZ¡ëÇ¥`ÁƒæD0À ‚9ÛÇ¥ð\<‹¼xËùÿç{¬÷ntsgÛ¶mÊÊÊ2Ý àt:åtžbÉ?þ(›Í&‹ÅÂuÀƒ±ÞðÌãããM7Àu$­ÄMʰžsû±†âÁb±HN§œ²œ¢¨E:?‰ïà©Xïâ)gœÕj3Ý”"áÁ.ZJ™Y™ü(+ÎNÉ¢ó¿Î¬÷@±c±Xd‘g¬ósÇj³Éæp˜n r^Øyî]5€‚`½Š)ÙG0àq¬V«,V:QœY/tÒœ5¬÷@ñä)÷“ ˜ðHž²‘Æ_Ã÷(~Xï܈æŒËÈÈPff¦23ó¾.Üb±ÈÛÛ[ÞÞÞòññ1ÐBàê!˜0ÆápèôéÓÊÎÎηœÓéTFF†222töìYÈZˆSÕ·íùŸ>š¹P¡Áv½5¤ÿ_m6nPO {Gÿ|±¿Ê• uMû5æ>þò½ÿ¿éô™t=ÿÆûšþ¯W‹t¹_/[«ÖS`€_‘Ö àòòÚþO8¥Oç-VÌÁßU:4X=;´RDµÊ’¤øSIš>÷;Å:¢RÁAêñH Õª~ëeët:šõÍrýø»ä”S-¸Wíl$IJHJÖ¿ç.Ò¾ßbeðWçÖMUÿ®ˆ\mÍÈÊÒgóëÿví“Ýß_Z7U½Z·_vÙ<Á¼€¦þreGéúÕÍ(â–žÁáp(%%¥Ð×fgg+%%Ev»½@áü¿ÛöèËo—+ªI}ý´u÷•6¸b+6lQƒ;kÌk,¯ívv¶Æ|¯ß~?¦÷¦ÍVå[nRXéP·öÎøz©ÎžËлÞӑ zoÚlÝT¶”ʇ•ÎwÙ<wG*„Sg-…ú—Ÿùóç+99ù/µ§ ut9©©©êÙ³g¡çWêôéÓ— å±±±š6mšæÌ™“ç|§Ó©Ó§Oh9!ÁõRU¾ù¦+n+Š—Õ?mÕ€¼«Á#Çkù†-’¤ÓgÒÕçå·ÝÊ=ÿæ8Å8¥ÓgÒÕø­ß²]/Œœ ¿½9N›·ÿÑ<üÝ)JN9­7'L×¢Õ›ò­@ÑÊkû{ô¸2²²Ô¡e¤Jøø¨Öí·êžÚwhÝæmrd;VFí[< ߺ·N …Ûu䨉|ëÌÌÊÒÚÍÛÔ§Óà ô÷Õ-7•Õ«Ï=®[+”—$=ž Æ÷Ý¥?_Õº½ŠÂÃJëH\¼[[ÓÏžÓ†-;ôD‡‡äçWRÕ*ݬÆ÷Ý¥•·ä»lžƒ`nȲeË”––vÕë(ŠåE-##ã’§¯ÇÄÄhõêÕºóÎ;ó­#;;[—?#¥jÅ›åï[âŠÚ‰â'3;[ûþ®qÿ¬—žê¦¯—®ÕÞ±—}ßÙsŠ=r\o½Ü_<ØHS¿üFÙÙÙzkHÙôÆó}ÔºIƒkð äÈkûïpJ6‹ÅíqN‡S'NÉj³êéîÈϯ¤$))9U'“’Té–›ò­3áT’üJjËÎ_õÊ;“5dô$mÛãºl¦n­Ûµ|ý•œš¦-;ö*1%UÕ«Tt«#þT²‚ìþ ôwM«Vùf=~2ßeðœÊ^¡%‹æñ¯¼òŠRRRôÆoè‘GQ›6m§©S§ê·ß~SXX˜úôé£jÕªI’Ö¬Y£¯¾úJN§S5kÖT¿~ý4|øð\ud9«V­Ò’%K§*Uªèoû›BCÿ8•jåÊ•š3g޼¼¼Ô®];µjÕ*W½ùµ(ˆÌÌÌKÎ TçΕ ýû÷_¶n‡¢ät:Õñ¡&òññÒ-áeuwÍÛ´ñ—êܺYþïs8Õ¦yCùù–T³úu5çÛå:•”ª2¥‚¯QËDÅòådµZµð‡ujyŸöÄÒÛv)¢je·rYÙÿô+µkþ€J–È¿Ÿ9•œªø“IÚ{ Vÿx¾·âO&jì´Ù TÝš·«STS½þÞ4 ñ¾œ‡žíÑÁþs$§¦Ê·„{èð+©äÔÔ¢ùà®{1/„~u3ÔÔ¾[ýêfhüR¢££e·Ûõæ›oªM›6r8ŠŽŽV£F4mÚ4µk×Nï½÷žÎž=«´´4M:U/¿ü²Æ'___mß¾=WYNrr²–,Y¢>}úhêÔ© ×ܹs]å³²²´oß>M˜0A¯¼òŠ,X Ý»Ý¯aʯ­@AåÌÃÂÂäëëû—ëòâ”Ãíu¶ÓýµER=Àõºbù›”˜|ùË&¼m6ÙÎé²Ú¬òõ-©ìlÇeÞàZó²YõR¿nÚþë~½0rœÖüø‹nÒÀíHµÓéÔ”/*4$H´htÙ:ü|•ép¨WÇÖ ðóUå[ÂÕ¸¾þ»ãW9%½þÞ4=ÒòM=T£^|Jß­Ú ­»ÿçV‡=À_égϹMKK?'{@€óBˆ‰‰q 2^Pÿûßÿäp8Ô´iSY­V5hÐ@>>>Ú¿¿|||äãã£C‡I’zõꥺuë^Qûƒ‚‚­Ûo¿]gΜ‘ÝnwÕ+ïˆ:wî¬%J¨B… ªW¯ž6nÜXà¶Àõ¬T°]GOœt›wâ”Ê„¹^;uþèWŽCG㠛ͦL‡CgÏßéš‘‘¥Ógκ EU€+s.#Ciigô¿õÒGo Õ }»èÄ©$UºèºíÿYª¤äT=Óý‘=½LH°lÉšGÙ±GeµZÔä¾;UÂÇG•o W£»kë¿Ûu+W64XI©§•œúÇå‡1릲¥þ§p#!˜BÕªU]ÂŒT||¼Nž<©¸þeff*99YÞÞÞz饗´bÅ õíÛWü±’’’®¨ýÙÙÙúâ‹/ô /(::Zp»Î×jµºÖ^±bE%&&¸­p=kÒ ®fþg™~9¤´ôsÚþkŒ¾^¶Fï»ËUÆb±hþâÕÊÈÊÒ‘ã Ú²}ÜYS¾%|à§eë6ëì¹ -Z½I*àñ ÀÅ_Ø–þ•züuV«Uãþ=WKÖü¤ôsúïö_µã×ýjP÷üã˾]±A¿îÕ }»ÈÛËýŠÏÖÿW'N&æªÓϯ¤î½3B3þ³Tç22{ô„–¬Û¬{jUWÙR!JI;£M¿ìtÍÛ¼m·n¹©¬[¾¾%uß54ã?K•ž~V1‡kÕ¦_Ô¬áÝù.€çàóBÈëhxþã5 ToHHˆ*T¨ ·ß~;ÏùzóÍ7•ššª>úH .Ô“O>YèöoذA[·nÕèÑ£U²dImÞ¼YóæÍsÍw8:yò¤J—>ÿXŽƒ*$$¤Pm ÂÛÛ»@7n+H=@A=yŸ¬«>ùê{LJRÙÐP=öp3Ý_¯–«Œ¯o U«|³^9AÞ^6uhÕXÕ«ž¿IS¿®íôﯾײu›ÕîÁF ¶h¹í[FêÓy‹uß5ôØÃÍ®¸·——^îß]ŸÎ[¤y‹Wé–›ÊjèÓÝUÂÇG)§Ó4绲ڬzîc]ïy¬Msµj|Ÿ–¬ùIþ*[*$W½O<ú>›¿XGŒS Ÿ¯Ú?ØHukžùàÞ5÷»údîw ðóÕ÷ÔQ«Æ÷É)¹ÕÙ»ãÃú÷¼ïõâ[“dðSïÎë–›Êæ*À3Ì ¡jÕªŠ‰‰q ¿Üøª_.]WHHˆ®Ûn»M©©©Z»v­5j¤C‡éÃ?Ôo¼¡´´4=Z¯½öšT¢D W ¹¸Ž‚,'++K6›M‡CéééZ¼x±[Y‹Å¢¯¾úJO=õ”âââôóÏ?kРAneòk«¿¿¿€‚(ª`^˜¿Õª~«jU¿õ//7.‹Å¢V‘÷ªUä½yÎðóÕ”·†J’šÖÏ}ÉP;ªjÜël[>ðG=Óÿõª[Ù o vßS»ºî©]½@õ(zÞþW¾%\o¾ðT®röÍxÿõKÖ3vøÀKÖàç«ç4Ï÷ET«œçòþ\§—žîþH®2–Ë,€g ˜BQ1ïСƒ>ùäÕ¯__ݺuÓ°aÃ4}út}þùç WÇŽåïï/µlÙRo¿ý¶U½zu×Ñò?×q¹åtêÔI;wîÔÀU®\9Õ¯__ëׯw•õóóSÕªU5pà@yyyéÑGU5”zÑA½½½/ÙV  |||töìÙK>2­ l6GÌà.G‹+¯Ç’Çx^C‹þ¸ÖÝzÑ뜡íÂÐ븗$Ÿ CoIµbbb>/’O‘©¿ø¨_ÝŒB1ÏyϵW0ïÞ½»Ú¶m{M––ÃáPJJŠœÎÂ?†Ðb±Èn·ËjÍ}›Œ½{÷ªÒ=)++«(š €ë\ðOHÚ!)SR–¤Œ Ãì CÇ…q‡Îßëõâ¡.zóÃôRÃ?ç7­P8b^Sñ‘Tã¢SÔ 2~m|ùå—×vÀ_dµZe·ÛuúôéB9·Ùl È3”7"‚y]«#ß@q’Î322”™™©ÌÌÌ< [,y{{ËÇLJÓ×àqæŒóññ)ÔÜOB0àq*øž1Ý À¸HƒæD0À ¸Æ¼L™2¦›à:±wï^ÓM …#æüZ¾|¹‡é¦€Á€Ç;vì˜^~ùeEEE©wïÞÚ¼y³é&Á€¨¨(5kÖLÍš5Óc=¦#FèøñãzoJJŠZ¶l™ç¼øøx}ñÅJKK+Êæ(?ýô“Úµk§§žzÊ5íðáÃ2dˆZ·n­¾}æslj IDATûêçŸvÍ+H‘W‡C“'OVÇŽÕ©S'͘1Ã5/..N¯¼òŠ¢¢¢Ô³gO­\¹2϶fdd(::ZíÛ·WïÞ½µ~ýú<Ëѧž‰`Àã9RUªTÑܹsõä“Oêõ×_Wbb¢éfÁ€Ï>ûL+W®Ô| J•*©ÿþù»P¾|y}öÙg ,¢V( k×®Õ¸qãôØc¹¦eeeiذaªY³¦,X gŸ}V£FÒÉ“'%]¾¿È«NIš6mšâââ4mÚ4EGGëûï¿×²eË$Iÿú׿T¦LÍ™3Gƒ Ò;CÇçjï„ töìY͘1CC† ј1ctðàÁ\åèÓÏD0àѲ³³uË-·èñÇW`` š4i¢²eË*66ÖtÓ`P™2eÔ«W/ÝÿýnG¶Ž=ª_|QmÛ¶Õ3Ï<£={ö¸½oÑ¢EêСƒºt颯¿þZRî£é‹/V¿~ý¥Aƒ)!!ÁU®M›6Z¶l™ºvíªÎ;kõêÕWÿÃÅTéÒ¥5eÊÝvÛm®i111:w|òI•,YRõêÕSãÆµtéÒõyÕ™‘‘¡Å‹ëÅ_THHˆn½õV½ÿþûºãŽ;$IT›6md·ÛuÏ=÷¨bÅŠ¹ú ôôt-_¾\Ï=÷œ¡‡~Xß}÷[9ú4ÀsÌx4›Í¦W_}U’Οv|âÄ ·U(¾š6mª]»vI:*ê°aÃÔ¢E -\¸P]ºtÑ?þñ¥§§K’233µsçN}ùå—=z´>ÿüsmÛ¶Í­¾¤¤$-X°@ƒ ÒþóU¨PAŸ|ò‰k~zzºöï߯©S§ª{÷î3fŒ²²²®ÝŠ‘5jäy&‹Åb‘Åbq½v8:|øpú‹¼êŒ‹‹“Ýn׺uëÔ«W/=þøãúñÇuË-·H’5j¤ (!!AëׯW||¼j×®íVÇ‘#G¬Ò¥K»¦Õ¬Y3×sú4ÀsÌ™™™1b„zôè!___ÓÍÁu téÒŠ—$íÞ½[ÙÙÙŠŠŠ’ÕjUÓ¦MU²dIýú믒$§Ó©Þ½{«dÉ’ªR¥Š5j¤+V¸Õ¬©S§ªfÍš:sæŒBBBôÛo¿¹æ;uíÚUj×®$¹Ž¨¸ún½õVÙl6͘1CgΜѦM›´jÕ*¥¦¦º•+L¯cÇŽiÇŽ?~¼†®3fhãÆ’¤^½ziûöízì±ÇôÚk¯iÀ€®`#))Iv»ÝmZ`` ’’’.¹\ú4À³xÄãÒàrœN§Þyç•-[V={ö4Ý\'Nž<ézäf\\œâããÕ¹sg·29×nZ­V·£YÕªUÓ?þèV6++KS§NÕ¦M›äçç§   ·#âÞÞÞ ‘tþÈ—¿¿¿233¯Êg›···F­÷ß_sæÌQíÚµÕµkW×5æRáû‹ÀÀ@eeeé…^¯¯¯‚‚‚Ô©S'­]»Võë×׳Ï>«'žxBÍš5ÓÁƒ5fÌÙívÕ¯_ßUGPPNŸ>íVïéÓ§”ç2éÓÏC0P,|ðÁJLLÔ;ï¼ãv #Š·•+W*""B’TªT)U©RE}ôQ®r)))r8ŠWÙ²e%Iûöís ê9õýôÓOúøãåëë«uëÖé³Ï>»ú@œ={V©©©?~¼kZtt´jÖ¬éz]Øþ"<<\6›MVkîQ÷îÝ+///µnÝZ’T½zuµlÙRkÖ¬q æááá:yò¤N:¥ÐÐPIÒ®]»T¡B…<—IŸxNeàñfÍš¥íÛ·ë­·Þ’éæà:püøqMŸ>]7ntmŠˆˆPrr²–-[&‡Ã¡½{÷ê©§žrâj±X4}úteddèàÁƒÚ°aƒš7oîVovv¶¼¼¼äp8tæÌÍŸ?ÿš6—fµZõúë¯ë«¯¾Ò™3g´víZmٲŵ.ç×_|ýõ×:zôh®:©I“&éìÙ³Š‰‰Ñüùó©råÊ)11Q+V¬pÍ[½zµªT©âV§¿¿¿š6mªI“&)--M»wïÖ·ß~«6mÚäZ6}à™8bÀ£%&&jÊ”)²Ùlzä‘G\Óûõë—ë”ex¾'Ÿ|R‹EeÊ”QDD„¦Nê:µÜÇÇGÑÑÑ7nœ&Mšävçã””ùûû+""B]ºt‘···žxâ Õ©SG)))®ú›7o®-[¶¨K—.ºùæ›Õ¸qã\ס0ÇÇÇG£GÖøñã5}útU©REcÆŒQÉ’%óí/:vì¨ùóç+((Hááá¹ê4hƧŽ;Ên·«Gjذ¡$éŸÿü§¦L™¢wß}Wv»]­ZµRÇŽåp8Üê€Þúõëiº¸FŸ´CR¦¤,I†Ù†Ž ãIÎ? uÑkç…×—þy<¿i…©ìD0À ‚9Ì0ˆ`€A<. €Ç 0Ý À8b€As "˜`ÁƒæD0àñ~ÿýw=ÿü󊌌T‡´xñbÓMÂu$99Y 64Ý —©S§*11ñš,kýúõêÓ§"##Õ½{wÍ›7Ïmþ±cÇôòË/«iÓ¦jÙ²¥þùÏ*--íš´ ( 7nTóæÍÕ½{w×´ØØX=÷Üsjܸ±ºuë¦Í›7»æ9rDTdd¤ºté¢M›6¨N‡Ã¡÷ß_=ô¢¢¢4}út×¼cÇŽ¹ú G}TË–-˳­9r¤Z´h¡.]ºhõêÕy–£O<Á€Ç2dˆªV­ªï¾ûN¯¼òŠFŽ©ØØXÓÍò4oÞ<¥¤¤\õå,[¶L#GŽTÏž=µpáB 2DsæÌÑ”)S\e^yåU®\YsçÎÕ´iÓtôèQ;öª· ( +W®Ttt´zôèáš–••¥Áƒ«N:Z²d‰¬áÇ+!!A’4|øpWѯ_? :T§NÊ·NIš|¸F¥ä*GŸx&‚9–­Ç\Ï<óŒìv»êׯ¯Š+êàÁƒ¦›†kìðáÃzöÙgÕ¬Y3=ñÄÚ¹sg¡Ê%''«I“&úöÛo¥(11QC‡UÓ¦MõüóÏ+==½@õ4mÚT‹-RÛ¶mÕºuk-_¾\’Ô£G%&&ªoß¾š1c†$é›o¾Q=©þýû+>>Þ­žY³f©Y³fÚ¶m›&Ož¬#F¸Úàt:ÕºukýòË/nŸÑáphܸqzã7Ô¬Y3…„„¨nݺ;v¬f̘¡S§N)##C»wïVÏž=U¦LU¨PA£FR‹-Šæ?¸ÊÊ”)£/¾øBwÜq‡kÚ¾}ûtöìYõë×O¾¾¾ºï¾ûÔ¼ys}÷ÝwÊÎÎV… Ô·o_Ùív=øàƒ së/òª3##Cß|óþþ÷¿+44TÕªUÓ‡~¨ˆˆIÒÔ¡C©~ýúª\¹r®>èÌ™3Z²d‰^|ñEªvíÚjß¾½¾þúk·rôi€ç"˜ðh6›MmÚ´‘222´dÉÅÇÇ«nݺ¦›†kÈáphðàÁŠŠŠÒòåËõøãëå—_Ö™3g U.==]ñññš3gŽBBBÔ­[7µoß^óçÏ׉'ôí·ß¨ž3gÎhß¾}š9s¦zõê¥Q£F)++K3gÎTHHˆ>ùäõìÙS‰‰‰š3gކª~øA•*UÒ‡~èjoZZšbcc5{ölEDD¨eË–Z»v­²³³%I;vìÓéÔwÞéö99¢´´4ÝÿýnÓ+T¨ ªU«j÷îÝòññÑ=÷Ü£W_}U¿üò‹‡J•*¥ íp•ÔªUKv»=×t‹Å"‹Åâzíp8ôûï¿Ëf³iäÈ‘ ”$8qBqqqª^½z¾u=zTAAAZµj•{ì1uìØQ6lPÅŠ%IMš4ÑìÙ³¯Õ«Wëĉºë®»Üê8|ø°BBBT¦L×´Úµkç:bNŸx.‚9€báÈ‘#zàôúë¯kĈ 0Ý$\C;vìPvv¶Úµk'«Õª-ZÈ××W»wï.T9§Ó©®]»Ên·+**JÁÁÁjذ¡BCCÕ¤I×餗«Çápè‰'žÝnWÇŽ%¢™3gªN:JKKShh¨bbbÜÊ 0@eË–•———ªV­ªÒ¥Kë矖tþ´Û-ZÈjuïîãââ–çß*,,Lqqq’¤‰'ªY³f=z´Z¶l©É“'+55µP{àzR­Z5yyyiúôéJKKÓºuëôÃ?äº|$33SÆ SïÞ½åçç—o'NœÐ‘#G´uëVM™2E£FÒôéÓµvíZIRÿþýµuëV=üðÃ2dˆ^xáWøÏ‘˜˜˜+ðÛíöKÞo‚> ð<^¦×BùòåµqãFmÛ¶McÆŒ‘ÓéTdd¤éfá9v옎?®Ö­[»M¿øÚÑ‚”óòòrýH·Ùlòõõu•ñññ‘Ãá(P=ÞÞÞ uÕãïï¯ÌÌÌ\íÎÊÊÒ¤I“´~ýzùùù)88XYYY®ù^^^¹~Ì·hÑB+V¬Ð½÷Þ«•+Wêí·ßÎUoXX˜ë”ø?;~ü¸+´{yyéÑGÕ£>ªèã?Ök¯½¦ñãÇçù^àzçíí­÷ß_ï¼óŽf̘¡»îºK?þ¸ëséü¸#F(,,L}úô¹lv»]YYY6l˜k=íÖ­›V®\©F©W¯^êÛ·¯Z¶l©ß~ûM#GŽ”ÝnW£F\uëôéÓnõ¦¦¦*888ÏeÒ§ž‡`À£¥¤¤hïÞ½ºçž{d³ÙT·n]µnÝZkÖ¬áGL1RºtiU«VMŸ}öY®yÉÉÉ….WTË»œeË–iãÆúüóÏåçç§U«ViêÔ©ù¾§eË–zúé§]GâkÖ¬™«ÌÍ7߬%JhÓ¦Mn§¦ÿþû‰ÑwÜ¡¸¸8mÞ¼YíÚµ“$U©REt»5p£IOOWJJŠÛMGŽ©Úµk»^¿÷Þ{:uê”ÆïvÊû¥”/_^6›M6›-׼ݻwËËËK<òˆ$©Fjݺµ+´_\G||¼Nž<©R¥JI:æM¥J•Üê£O<§²ðhN§S/¾ø¢æÎ«3gÎh÷îÝZ²d‰ë¦<(j×®­¤¤$-Z´H‡C{öìQ÷îÝs¾ZÐrEµ¼¼”)SÆu*yVV–¼¼¼äp8”––¦Ù³g_öý+VThh¨fΜ©–-[æYÆjµjРA1b„V¯^­ÄÄDýòË/z饗ԭ[7•.]Z%K–ÔØ±c5oÞ<%%%éÀš2eJ®kc‰ÍfÓСC5kÖ,¥¥¥iåÊ•úñÇÕªU+IÒ§Ÿ~ªÿû¿ÿÓØ±cåãããöÞ¹sçêðáùê T³fÍ4vìX¥§§kß¾}š={¶š5k¦ððp:uJK—.uÍ[¾|¹ªV­êVg@@€Z´h¡±cÇêôéÓÚ±c‡,X :¸•£O<GÌx´   ?^'NÔĉ¬:¸~ì xðññÑøñã­±cǪbÅŠ®;/_|» åŠjyyéÓ§¢££Õ¼ysõë×O?ýô“Ú¶m« *¨Y³fZºtée—Ÿs=xÎÝó%MŸ>]Pxx¸:uê¤Ç{LÒùSk'Nœ¨ &h„ *Y²¤êׯïv×wàFããã£qãÆi̘1úè£TµjUMœ8Q¾¾¾:uê”&Mš$›Í¦|Ðõžªk×®š={¶‚ƒƒuóÍ7çªwèÐ¡ŠŽŽVTT”‚‚‚Ô»wo×ìwß}W“&MÒ[o½%»Ý®6mÚ¨k×®r8nu6Lo¿ý¶yä…††êÕW_UµjÕÜʵlÙ’> ðP—??çÊë±ä1ž×Т?ŽÜ[/z3´]z]÷’äsaè-©VrròçEò)ÜðÖ¯_Ÿëº^ ¸Ù´i“Þ}÷]ÍŸ?ßtS¸ê,Ë’vHÊ””%)ãÂ0ûÂÐqaÜ!Éù§¡.zí¼ðúRÃ?ç7­P8•’””¤¯¿þÚu9¸þÌð©©©êÖ­›üüüÔµkWÓÍÄ5æxˆÀÀ@-^¼Øt3@!qăæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0ˆ`€As "˜`ÁƒæD0À ‚9Ì0èÿÛ»÷;ÊúÀß½UPvƒ-% ÅT1¿f©È¥J¼`”‹B ¢X0¶)¦F£ÁA£‚5…¢HAb0TB‚¶b@´£DÀZ @ÙVèe÷ìïölg‡9—Ý={ÞÙÝçINΜ™wfÞ™Ónö³ïesHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„l:HIDATsHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„sHH0€„ºSW 6mÚ”º @‰<ùä“©«M›Á¼··7uFyì±ÇâÐCÔUÉÏ„ÉUÆë)cš5-‚yDÄÐÐP Åððp’ówttDWWWtuu%9?0šŸ “Ï=hiÌ+•J &­Ãððp FGGGÒz~&´CõúÊP‡éz€™cZLþV©TRWaD™ê3U™þ–©.Ó•{ LuÓ"˜§êFY¤Lu™ªLÿËT—éÊ=¦ºiÌ`ªÌ !Á¼ä>÷¹ÏÅŠ+bÛ¶m©«Ð2²În‚yÉ=þøãñ›ßü&–.]O>ùdêê´„¬³›`^2;vìˆ[n¹%–/_§œrÊÈú§žz*–/_<òHÂÚÁ̰eË–X¿~}êjÌÿùÏbË–-©«Ñ;vìˆÛo¿Ý,òÌX²NmÓâ9æ­ðË_þ2"">úÑ&«Ã‹/¾çw^<þøã…Û·mÛ¯¼òJ›k3Ë‹/¾wß}w ÆI'Ô¶óÞsÏ=±bÅŠˆ5k֌ڶuëÖ8á„F>÷ööF,[¶,æÌ™Ó¶:N†ûî»/º»»cáÂ…ñú׿¾-ç\·n]\|ñÅ1wîÜøÁ~ðªí'žxblÛ¶mÔóÑ¿ô¥/Å>ðºÇýÉO~'œpBì½÷Þ…ÛŸ}öÙ¸þúëãï|gôööNì"`Š‘uê›J-æÃ¹åiõ|œ¡¡¡‘¨x`\pÁñ‹_übdû¼yóbåÊ•Ñßߟ°–0½½ð q÷ÝwÇŽ;Úú®ßÿþ÷ñï|'.\X·ÜòåËãšk®‰óÏ??þýïÇ%—\Ò¦NžáááØ±cGüñŒçž{nÒÏw×]wÅÊ•+Gý•¾ÈêÕ«ã¶Ûny5 å·ÜrKÝÖÿ8 V¯^-”0ã´1ëäsâ”ÉŒe æSæ¶Ê­·Þ?þxpÀñýï?Ž>úèèë닃:(Ž;î¸XµjU¼ùÍoN]M˜¶6nÜ8ÊÛ­¯¯/V­ZGuTÝrsçÎ<0,X§œrJ<ðÀ±}ûöˆˆ¸í¶ÛbÙ²eqüñÇÇòåËGÓzøá‡cÉ’%qê©§Æ~ô£8ÿüóGZŠŸ~úéøò—¿'žxb,Y²$zè¡É»Ð:ãÞ{ïgŸ}vRÏ3gΜ¸âŠ+âàƒó¾ñ±},Ö®]Ÿüä'cÑ¢EqçwFDÄÒ¥K㥗^Š/|á ñóŸÿ|¤ìM7Ý'Ÿ|rüío‹øð‡? ,¨[îÅ_Œ=öØ#öÜsÏvT f„|°é ¹…ËÉ´iӦذaC¼ð qóÍ7GÌš5+öÙgŸ¸á†"bç8æ}÷Ýw¤%÷ÁŒM›6ÅYgûï¿Ì›7/~ö³Ÿl{þùçcñâÅÑÛÛŸøÄ'âæ›oŽx ÞûÞ÷¶´îÍÞ·J¥>øà¤óf}ö٣Ƙßxã±³~§vZôööÆñÇ×\sMlܸ±f}?ó™Ïv]øá‡£R©ÄqÇïyÏ{âÚk¯Gy$Þþö·Çk^óšø×¿þx`,]ºt®Ú§ Y§áz"¦Z0Ÿò7¼–ÎΣ ²¿æmݺ5>õ©Ožûî«W¯nWÕ`Ú›?~¬[·®©pÞ××׆[±bEDìœümþüùqî¹çFDÄöíÛ㪫®Š»îº+zzz¢¯¯oäZž{î¹xÝë^ûï¿DDtwwÇ[Þò–ˆØÙS`pp0N;í´Q癌îä}}}M…óÎÎΘ?~ËÏ?V«W¯ŽyóæZ700ÝÝÝ#½ ºººâµ¯}m £«««æxògžy&ž}öÙX´hѨõ›6mŠžžž¸ð ãºë®‹ï}ï{qì±ÇÆâÅ‹[Þ‹Ú%QÖ™RÙqªó–É·„§ž•ýMozSüýïûî»/Ž>úèÂ2ëÖ­‹­[·& 0í¿ÿþqÔQGÅŸþô§Q!+åSŠ|ë[ß*ìμvíÚX³fM\qÅ1oÞ¼¸õÖ[ãê«¯Žˆˆ½÷Þ;þ÷¿ÿÅÆcŸ}ö‰ˆˆ—^z)""fÏž===qà 7Lú„dµºÿg{)uuuÅGûî»ï¤Ö¥ fÏžtP\~ùå…Ûûûû£¿¿?âÒK/n¸!–,YÒæZ@kÈ:•uò·fL«™Ù9昈ˆ¸êª«bóæÍ¯Ú¾yóæ‘_´«eÖ™;wnuÔQÑÓÓ“º*c¶cÇŽèêêŠŽŽŽøç?ÿ¿úÕ¯F¶ÍŸ??öÚk¯¸þúëã™gž‰›nºiäíýýýÑÛÛ×]w]<÷ÜsqçwÆgœ1é°éîîŽ#8¾ùÍoÆìÙ³'TG˜Îî¹çž8ì°ÃšžÌ­È–-[b`` Þð†7L¸>ù™0V•Jed W½õŸýìgãÝï~w|úÓŸ×y{ì±èïï7Ž»®Uëׯ¾¾¾Øk¯½Æ}ŒvÞc`|&3ëÌž=û̈økDlˆ¡ˆØ±ë5´ëUɼWbgËzõ=ÿŠ:ïùåzëÆ¤ÝcÌ«EË>­Ö£ÒªWÉ쓽Ù2V†±¤sæÌ‰Ë.»,n½õÖøÝï~O=õT <ßïýïÿ”ìf SÍ^{í5¡ ˜JQ(ß¾}{|þóŸcŽ9&Þ÷¾÷Åý÷ßO<ñDifúnÅ?€òkCÖÉfÄ|è®äÊÔÚ7œ¶)ëäoµ|VöfOÝÝÝqÒI'ÅI'”º*À40kÖ¬8ûì³ãÆoŒŸþô§Ñ××K—.mø¸€V›Ä¬“àÙõùåRæÇ2ó¢ôüÍ+åÍ(£Ã?<?üðÔÕh‡f²céòädNþ6ž‹-Ý `Ú)U^j³²ýõC˜˜¹Šrá”ʉ­ æ.z,ƒìëíWkö<f¦|>ÌNž-S´_½íõÖ7»½)ei1¯u“j…ïJ® 3S6MW¯Q·y²,Á¼HÓáèèhÕãØ'®Lu™ªLÿËT—éÊ=¢ùØ¥”2˜×ë6Pk,yQ÷„ለ®®®É©å”¡ÀNeøÿX†:L¦2\_ê$W”kµ’×ûœ,¸§x\ZÑãв*Qüƒ¢ñ•ˆˆJego…îîîd-'ÃÃÃ144”äÜÀh~&L¾ááá¨T*î1PÙáΣqë”­¥í½•¿M«£ÁrGf¹3³®³à½+óêμægÖuf^Õ²™ótåÞ³Ûj-Õ5­úQ3U­Vèá‚å|p.ZʽW· ízU2¯Á]ëÚµ<˜Y—-?\ðQ<Y­VôI£ž¢Å<¯V zõ†åû)Vr¯¿î*Ó;uwìä¹åzëò¡<΋‚z,×[0•5;»yQ—ò¢p\]ξòá;¿n(v†ïJDì¨Q>¯h¦öz×ÔV“̳¡»QöZe³_V50g¿¼ÎØùETƒôà®í]1:ÜWyõ ©òˆWô|(϶æ½ç—‹>LuÍŒÑοçÇ~gÃy6HgƒwµÅ<û9Ûj>œ[®DqØÏwi˘ò¶?OÕb^ ÞEa<àku}èˆÝ_LWìþ‹Iw¦\WæXÙ _=f5¬g¶Õk%ÏôZ]óf‚Z]¿ku¯×z>”)ŸmÏwm¯nÌm¯Ä«ÃxQýêÕ»¨l[”¡+{DqïȽGŒþ‚«­ãùã ÇÎëªÄèß•ûÜ‘[Wm/_^kÌyö`¦*j-Ïð¢uù]4¶<ßB>¯åÙ®íEç*ª_¾ÞIµ2˜7êª>ÖcdCy>Xwf–«_Nì*SýÜ™{¯¶ˆwfŽo%/j1Üö,Ý×€™ªQÈÍw%¯ÕbžêùñâEãÌ#Fò¢.òÙ:äë׊@Þ²PߎóFãÌ­Ë/Wyõ/%ÕîêÕ/¤+S6;–ˆ×zeÇ„× ãù–òJnÿ|϶ OVWö–IÌk…ï¢÷¢ý²­ç‘YÎvq¯–/j)ŠÑ­àE“¾UÕš‘=,̺Œç'c‹Üç¢Çœe÷- èC¹ãå'‹+ªO~]½Öó¶‡öVó¢@]o}#ùÇ›e×eŸ]1zb¶¡Ì~ÕõÙ–óŽÜr­G¥E®LäÖÕ"¤ÓU½àšàùuE-æõZÓkµžû¢îñù?ŒU­kmix/SWöjPÎw3¯5æ<»®’Ù–ÞÕ/¨¨•<[>ôë=­Þ£Ò„r`ºOkt> ×zŒZ£åZåë+û^É}N®Á¼¨ {­å|ðŽÌ碛— ôùsV·gs6ø…ùìq£Æºü2ÀLÖ¨[{QWöZa;âÕÁ<¿_Ѻ|KyÑçfêš_žTej1Ï*êúžoQϮ̶jkxµ{v]u|yQ(Ï!o¦u¼ˆ°Lw͆ÖF­èõº²g·W—‹öÉôz-â¥i%Ïš¬Yë¸õf2/št­^·ò΂÷ü ëEÇÈ—É¿V@/ª­u3I£\¯;y£îíùÏù™Ü£à½V—ö|/ìz-äm_Ñþ`^´­•á¼Vø.êÊž=N£Ù×ëՀݚ »µ‚yv[v{½ÐÞÎPÞhÛ¸”­+{£ñæEÛ"Šob¾{¾Ë{u9ÿ^Ô¾ÑgvjrûÎè¢îìEû×ZnT.¹É ˜­l5(nÝÎηœg—ë}Ο»™.ëÂ9ÀhÍ´<× ÊÍLÞV/¤ç?× û¥i-HÌ‹¶× çë› çÙåzÝØ³ûµÎkbëu/ÏwgϯK(¯u¼¢:6Sç–›ì 9ÞVóüçzA¼^ˆo¦µ½hßfê@}‚o½ÀÜL÷ü¾õ‚z3õi{kyDÚ`^´}¼á¼VÙzÝÔͺ>–{#´3ÕXëXǃ…ìzǘ¬PÞÌöqkG œÌp^´®QKzÑ~ciÙëv€én"¡¶VkwU­–ñìºZÌÕ:iByD9‚yQ™z“¯Õ ÓÂw½uÍÖ€ñkvr¸FA»ªRP®è}¬uh´OKµ+|Ž'œ×[W¯Ëy½IÜj…÷Fš™€Ñjê¢ryùÐ]ï˜ZÐk#y(hoØlu8/ÚÖì£Ïê•otnÆ®Q0n¶»{­òci%ot¾±”™°vÏñ†óFë…ê±vSÈ&ÇXÇs7 ïõZåǺ~¬eZ"EH8¯·­¨›úxÊÔ#°4g¢Á¶VWöfÊLô±gm åå æÍ”m´m<ç¼Ú£^×ózûŒ7t÷±n“.emW@Ïùš=>7èŽu úDÏÝÖ@^Օ⤻Œ5ðN´ |£,€´×Du麤Wê0:žó7»O«Ë09š Э.7Ñ}Z¢,¡´ÝÌËrÍkg°NÞª^¦ÚŠº”éz˜<­ÔÉCyD9ƒl«êTÆk`üZ¤KÈ«Ê^Ëþ(7Æ/E8.U ¯š At*Ô€ò*e ¯šj¡wªÕ€4JƳ¦CÐ×ÀøM™^d:†ÚéxMì6¥ƒxÞL ±3ñš¦’i¼ÊíÿòO[—Wò`IEND®B`‚ellie-commons-sequeler-9963fb4/data/assets/screenshots/new-connection-dark.png000066400000000000000000001016201512323162700276000ustar00rootroot00000000000000‰PNG  IHDR~³€¦ sBIT|dˆ IDATxœìÝy\TUãðgî Ã* ˆ™»¢â‘𦦕KY¹â¾k¦oY®™ùšY.?--—Ä|Ì×%M- 74ED´Ô^W\Ù÷m˜af~àÜvfažïçs?3Üíœ{LJsî= """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""k!1uŒÈšŽ•ˆˆˆÊGgê Cu CÕõ¸ˆˆˆÈxª]¬©:Y‹ƒ–šÊ[oK=N"""2žò†:‹ –ˆÊR_K;&"""2_e w-)$•T×â–YÒñ‘y(.È•ð,"üYB0*O¨+ë<"""¢¢àÊ:¯¤ùfÁÜCQYCŸ¤„e%퇈ˆˆH¯´€Wp¹Å…?sD¥¸’Â^iA°¤ùDDDTý•%´•ôJZ¯¤ý›”¹†Ÿ²†¾²Î+i¿DDDdÝÊðÊ:¯¤ýšœ9¡’B_IA¯¸×¢öiŽÇMDDDÆUžÀWÜkqóŠ+äd¦®@”5àIʰNÁ}‘õ*.øé—ò¿–´²®kr怊 h¥…¼ò†?s;n"""2¾²¶ð•å}Q¯E•cRæÔâWZ«\ÁpWÔÏúyB1ï‹Úoq󈈈¨z)Ë]»Úïõ­x%Ý R°¥¯´ŸMÆœ‚_qJ yùÃPÌ2ÉÓe@éá’ˆˆˆª¿âZäôAO?OÀ?¡O à XpûüÛ™-s ~¥uñêß矊 {Îx@}¶ÏX"""²|å c9p@2þÉùC`Qew½ŸY´ú™KÐ)i|¾¢&i?w•H$ï·hÑ"§nݺMAx€½1*ODDDÕJ–V«Œ¿wûöm¹N§ûÀüÓ¨+âçü“^iC¾•9¿âºxe0lõ“èjoo?³K—.ž¹¹¹ÍU*t:t:“Ÿ_"""²0‰‰r¹R©ôNxxøý¬¬¬¯ñOøÓ⟀—‹Â¯¨? ¾7 ©©+€²ÝÄQ°¥Oø¤jK$’¥¾¾¾žJ¥²¹Z­fà#""¢g¢Óé›› ­VëÒ°aÃ܇¶p yÝÀùoø(O®ÉÜÌ-ø7l‹>ô ùÞë§w[¶lé)“É|5qjLDDDVáib5jÜJHH°ðWþÅżŠKؤ„ÒW1™‚7rìÞ•=|=úˆˆˆ¨*h4899yè‚òGþ©‚YŬÂ^~ærWo~ųW°‹WþÜx²{—ˆˆˆªÂÓV¿ç$àŸìTð:¾âò‹YS·ø•ån^}óŧÊE ÀN§Ó9Tq=‰ˆˆÈŠ=Ívø§¥¯àÃ"€â[ýÌæéaæØâWýI’¢p‹Ÿ”­}DDDT•žf }öÐßÕ«Í…¶îÅÔ-~e‘¿ß\€akŸ ëEDDDÖdž­~ù3ŠÙ^Û§gnÁ¯à +ؽ«Ÿ'¶ö± QUÐ,’ÿæ ènßüÛ˜ s ~ùu¢ò§j}‹ŸYP"""ª¶$0lñËß0Up=³dŽÁ¯¨ " ÞÕ›ÿ½9U?ù³GÁ1†‹Ë/fÅ\BSI'¦¸±üd0Ÿú‘uÈŸAŠÊ(Å1‹hÎÁ©¤–?}Âf‹Kþì¡ï´ˆ–>=KMEÝð‘¿«—ˆˆˆÈXJº¾ÏlŸž%? äÖ?""""c±¸V¾üÌ9ø5ÊuÁ‘²-â$Qµ‘?ƒèsIþùß›s~<¡ùO6‘1l„Ì8èdÊàô¬'ÉbN2U+›a,­ÅŒaˆˆˆÌ‰EeK ~zùû×-ê„‘ÅÊŸ;,2ÈL]"""2 Ngê*H,2KYK ~üTUN§CNNT*•Y?¹\[[[K QÉü,1øQèt:(•JÈår4iÒ666¦®’µZ@©TB¡PXJø³( ~DDDVD­Vãù矇Z­†J¥2uu H$4lØ·o߆B¡0uuª%K½¹ƒˆˆˆ*@§ÓA£Ñ˜]7/W7­Vk–u«.Øâg†ôÿ(µZ­8éÿèt:ñ½D"›Á% A'©TÊ&r""åSæ¬ Ö“ÿ—U.?3‘››‹ÜÜ\h4´më…W_}-[¶€‹K8::ÂÖÖ2™L uÄp˜››‹œ%RSÓ[·îàĉãøë¯ëJ¥ÉdÉø«&"¢¢õïß&L€ƒƒƒQËMLLÄúõëjÔr­Ó€ ét:¨T*( Œ3¯¾ú*ÜÝÝ!•J¡Ñh Zý²³³ÄmŠjñÎÎNpq©Ö­[cÈw ÑhƒãÇãÇ/èå_ODD”Ÿ)B¸¸¸`æÌ™ ~FÄàg"999pwwÇìý íÛ·ׂ—–ž­V[)e‚€šµjaÈС2t(®^½Šµÿ·qq±°µµ­”2ˆˆÈòäoD`’ЧW§N‹é†®üŒL+ýŒ3зo?@fFf•Ð% Z4oÍ›7ãØ±cظñ;Þ*ODDdeüŒHúÖ¬ù?xzz"''ǨÙ¨ÕjH$ôéÓM›6Ň~;;;†?"""+ÁàgD999˜ñÞ{hа²ž^³g *µ 6Àôé3°yó&Ž•DDde võš»z‡ÁψT*|^ð2[Yi×ñU”V£…¯ï‹Ø°a=ƒ‘•`ð3"N­NµZmêªlld& DDDd< ~FÔ¸qc’¼1ûÌ­\ކ "--ÍÔU!""#bW¯õbð3¢ÔÔT8::";;ÇäÏGT(lQ³fM¤¤¤@øä>2WWW|ÿý÷ ÅŠ+L]""«ÂàgD)))¸w/7FZZ:’S’þ— ¨íì Ü»wéééptt|æý®]»Ý»wÇŽ;ðÍ7ß”ºþæÍ›áéé‰~ýú=sÙÆR»vm :Ý»w‡‡‡t:"""pûöm 66ÖÔU4;...Ðh4HIIç9;;£^½zhÙ²¥ kFDdüŒ,##·nÝB“&Ï¡YÓ¦HLLBBB4M•–+“ÉP§NÔ®]ii©¸yóV•\ß7jÔ(œ8q7nܨô}›R¿~ý°páB888 !!W®\AFFš4i‚aÆaðàÁغu+¶oßnꪚ•­[·"::3fÌçݾ} 0ƒDDd ~& R©uµk׆««+4¨ÌÌL$§¤ >>99•Ó lk+‡««+œœá`´4ýôSŒ5Êl®e|V½{÷ÆçŸŽ””Ì›7¯Ð£…š4i‚¹sçbæÌ™ÈÉÉÁ?þh¢šZޏ¸8SWˆÈ*1ø‘N§3hÙËÊÊBtt ÒÒÒáää„F à9OOää(‘––Ž´ôtdggC©TB¥R!777ïÎ`m^÷° H ¤R)är[(lmaï`‡š5j¢V­š°µU@£ÉEzz=z„¬¬¼}éi4šJíjÖétX¿~=–-[†ñãÇãû￯´}›Š­­-æÌ™ƒ'Ož`Ò¤Iˆ/´Î½{÷ðþûïãÛo¿Å|€«W¯V»O""ªüŒH£Ñ@©TÂÞÞ¾ÐüÌÌLh4¹P©TOá [[(låHœä=]C«ÕŠOÚÐétây./Ä)•Jäää< „r(•…Ç ™™•ÚŬP(pôèQ¼óÎ;˜0aNž<‰{÷î•{?ݺuèQ£Ð¢E ¨Õjܾ}GŽÁo¿ý ¯ÛúÔ©S¸téæÌ™Shû¶mÛbûöí¸qãÆŒShy£FðÓO?Áßß7n,±.~~~puużyóŠ }zjµŸ}ö~þùg¼ùæ›…‚ß /¼€±cÇ¢U«V°±±Add$öíÛ‡C‡ÚWxx8¶oߎ7bìØ±èß¿?ÜÝ݃˗/cÆ …îÄ®È6z¥ï¢¼øâ‹3fŒxÞ½{÷pøða>|Z­»víBóæÍ 6Dxx8`åʕسgÂÃñÿþ"oî¨êsEDdÍüŒL­VA.w*ñ1ijµJ¥²ˆ)G|ä-ÃÉÖàçâºr% är9RS+·+ÖÆÆ°bÅ bÉ’%?~|™¯%”H$˜2e &Mš„{÷îáÈ‘#P©TèÔ©–/_Ž^½zaÑ¢EÈÍÍÅ¥K—йsg‚Phÿ¾¾¾ÐjµhÙ²%‘ššj°ÜÇÇRb}AÀèÑ£qãÆ œû 0nÜ8ÄÇÇãçŸ.õÜó\Y+àfDžžžhßÎ YYÙˆŒŒ ƒL&3J”H$ÉdÐé´ˆŒüYÙÙhß®=5jT©eèmÙ²<ÀôéÓÑ AƒR·•Ëå˜:u*BCCñí·ßjÅÛ±cΟ?)S¦ÀÉÉ .\×-˜_5жm[üþûï¸uë|}} – ‚€Î;#,,¬Ônîçž{ððáÃRë_A0mÚ4zô2™ çÏŸGRRR™ö«T*ñÇ sçÎòºq5ØâçϟǤI“ •JѶm[ØØØ”éú> ïÑb™™™xñűeË–2m3wî\899aáÂ…xüø1 jÕªUâp"îîîxðàA™ö_Y*r¾ï߿ԭ[·ÒŸ¼aÎ犨:2·ké8œ‹ñð?#Òà\ðŽGýÎ))©ˆŽŽF||rr”PØÚÂÙÉõÜáÙ¸1š>ÿ<žoÒÍ›5EófMñ|“&x¾Ix6nŒzînpvv„íÓ›ãã””Tdff9€svvV•?#XoíÚµHLLć~‡Bõyô耼ǟ•GHHZ¶l {{{téÒW¯^Eff¦¸üÂ… °··G›6màí휜üñÇeÚ·F£ÁÎ;Ñ®];ôèÑ£Ôõ=<<0dÈñºI}@iÚ´i±ÛØÛÛ›,øå;ßú›\¼½½+½>æ|®ˆˆª?#ËÀY^êÎé鈋‹Ãƒqûö\½z/†á÷ßÏ!(è8‚‚Žã÷ßÏáâÅ0\½z wîÜŃŒŒŒBÃaä§ÀÙ˜ÏÒMKK×_~‰:uê`üøñÈÉÉ1X~éÒ%deeaÈ!ÅîÃÃÃÍš53˜wá‚€¶mÛ¢C‡…ÆÜ»{÷.âããÑ¡C´k×Nì.«€€ÄÇÇcöìÙ¨]»v±ëÙØØà³Ï>ƒV«ÅÁƒW®\Z­Æ;ï¼Sìvo¾ù&lllVæ:U†ŠœïÄÅÅaôèÑÅn3kÖ,¬^½r¹@Þ_îe¹Sݜϑ5HLL4YÙùÿX§ªÇàgDùp¶±±1éÎÉÉI•>€siNŸ>'N`äÈ‘…BTrr2þûßÿ¢W¯^…ÆÞòê½`Á¢^½zâü{÷î!..¯½ö\\\ŠìƽpáÚ·o¶mÛ–¹›WO©TbíÚµhذ!víÚ…N:ZÇÓÓ_ý5:v숵k׊wÃÆÄÄàÀâ@Òyxx`ôèѸ~ý:~ÿý÷rÕëYUä|«T*lÚ´ -[¶Ä¢E‹ µ\÷íÛ£F‚J¥ÃuLL êׯ_êgݜϑ5X»v-Œ^nfff™/¥¡ÊÁküŒH?€ó^Edd$š6}Þè8çä(ù7tÀ»C4jÔȨ³Z¹r%ºté‚6mÚú sçÎèÚµ+Ö­[‡-[¶àÌ™3xüø1š6mŠ)S¦À××;vì@tt´Áv!!!xã7‡»wï*óüùóøüóÏËu}_~AAAÉd˜?>6oÞŒèèhüïÿCVV<==ѦM¨Õj¬_¿»wï6ØvëÖ­ðõõźuë°aÜ?^| Ù¬Y³`oo5kÖ”»N•¡"çûÈ‘#¨_¿>&L˜€:àâÅ‹â#Û^xá\¿~Ÿþ¹¸þÉ“'±`Á,[¶ ·nÝÂÕ«W‹}l›9Ÿ+¢ê.$$¤BßdyüŒ(ÿÎÿÐÐ0Ô¯ïæÍ[ÀÁÁ¾JpNOWãÎ;xòä ê×ÏëÂÓà\Þ§,<‹¤¤$¬^½Ë–-+´,-- ãÇÇ'Ÿ|‚éÓ§cúôéⲌŒ |÷ÝwE8‚·Þz«Ø±ù •JÅAŸ+â×_EXX†ŠnݺÁ××ÿý7öìÙƒ€€€"‡ˆIJJ˜1c°|ùr|øá‡øðÃÅe‘‘‘âÓ*L¡"ç[«ÕbãÆ¸zõ*ÆŒƒ@§Ó!22+V¬ÀÁƒ ®=pà\\\ðÖ[o¡W¯^ؾ}{±ÁÏœÏQucЧ²2çºU¦<»’"ÞKòMÒ|¯6O'9ÅÓÉ€€¯»téâeŒ1éžUjj*6lø7FZZ:bãb‰˜˜8;;£eËpw¯…Bììldee!;;;ߤ߀ÝÓI;;û§¯v°··pŽŽ‰Æí[·œœwww<פ ÜÝÜààà€¨¨(Ìšõ¾YnÛ AxyyÁÎÎ?Æ_ýeñ×4oÞ­[·†L&Cdd$þøã£Œ¥Xæv¾Íù\Y*ýݲéééhܸ±ÑFv(‰D©TŠû÷ï£fÍšâ_»ê0øQÞàËÿ´²™zg­Vkvÿ艈¨j郕¹~ÿëÃU ?#Ñét111Ñÿ à¬ÑäB¥R=íÊÕAak …­‰ô—AjµZ±é[¿Oý{ýåJ¥999OaÞ€ÎE àüøñ#ñ1\lN'"ªþôݽ–¬øÿRÕ`ð3ý_U2™ GþŠ©S§•:€³R©,bÊ߀B¡(0Ùü\Ü?l‰DüöÛ1ØØØˆuä?2"¢ê/ÿw½¹µúñÿ¡ªÇœÈÖÖwïÞÅ¡C?mü¾‚ò†w‘áçŸ"""B|ÂY‰DbVU=¶ø‘D"ƒƒ~ÿýwDGGcÒ¤Épss0êÎññqøþû-ˆŒŒ„ƒƒqÊ&"""óÀàgúk*€¼7DFFbþüyèÚµ+† †ÆUéÎ'`Ïž=8þd2Y¡ÐÇHDDTý1øQþ¨P( Õjqþüy£iÓ¦èÝ»7:uê,Þü¡Õj¡Ñh››ûtÌ>¡PXË»«7¯ûÖÆÆr¹ EÞ@ÎÑÑÑ¿„“'Oâï¿ÿ† ìíí žÔÁÀGDDd=øä#ÓétbøËÿªR©““•J4oÞ 4@:uP»vm8::A¤OÞþ_8$Kjj ‘˜˜€‡âîÝ»ÈÌÌ„\.‡­­-är¹òò¿2ø•ŽOî  ).héÃ7¼Ë;wpãÆ h4qÒ‡F}`ÌA¬T*'}럋‹‹A™Å½‘u`ð3üÁK?ŒJþW™L™LVämöçÞŠºvaˆˆˆüL¬¨W/+_Iû)êg†="""üÌJIa­´A6ˆ¨4 ~‚ÁŽˆˆˆžŸÜADDDd%üˆˆˆˆ¬ƒ‘•`ð#"""² ~DDDDV‚ÁˆˆˆÈJ0øY ?""""+ÁàGDDDd%üˆˆˆˆ¬ƒ‘•`ð#"""² ~DDDDV‚ÁˆˆˆÈJ0øY ?""""+ÁàGDDDd%üˆˆˆˆ¬ƒ‘•`ð#"""² ~DDDDV‚ÁˆˆˆÈJ0øY ?""""+ÁàGDDDd%üˆˆˆˆ¬ƒ‘•`ð#"""²2SW€ˆÈt:©«`‘$‰©«@DÏ€ÁÈBedd ''Z­ÖÔU±8r¹ÜÔU°X‰r¹¶¶¶ DˆÁÈedd@¥RA.—ó?ßrÒétÐjµèСCs¨ÕjZ·n ðððÀ´iÓаaC“ÕÇÝÝK–,ÁO?ý„½{÷bîܹptt,Ór…B   øøøìóÕW_Å‘#G •5räH9ÜGUóðð@PP4h`Ôr‰È8ØâGTM <K—.Å?ü€7¢]»v˜:u*\\\°råJSW¯‘#G"227nÜ@dd$zôèQ¥å•Öâ÷ïÿYYYøê«¯ —Ë1a8]Û IDATÂÌ™3‹/.u¹~¿Å•QpÞáÇqöìYÀܹsƒ;vâããÚÂV–7ØâGd¹ÌóO"z&¶¶¶øðñiÓ&¬]»çÎÃwß}‡¯¿þƒ ‚½½= I“&ضm.^¼ˆŸ~ú Ý»w4lØýõúõ뇃âüùó˜>>ðððÀ¸qãðäÉÜ»w£FÂÀÅ€ððpüïÿÃðáÃÑ´iSܾ}»Øepuuźuë––†­[·bôèÑðññAff&<<<0~üx<~ü8uêų³³¡T*+¥žQQQ>:|ðF…eË–A©TâðáÃØ·oÒÒÒJ]®÷ÁÚ·J¥ªp½ŠsàÀ\¿~wïÞÅÀѸqcÜ»w¯Øe®®®¨S§üýý‘‘‘Ý»wãwÞ··7îܹSéõ#"óÁàGT EGG\]]ñäÉ“"×qwwGFF†Áò7n ^½zâÏ?dgg#;;2™¬ÄeõëׇL&ÃéÓ§ Êòðð@zz:222ÄíàÖ­[¥˳ֳ¢°nÝ:lÙ²/½ôFooo¼ÿþûeZŸ|ò .^¼(þÜ·o_Ìž=û™ëV>à+•J(•Jƒã/j™»»;¤R)þûßÿìÇÍÍÁ¨šcW/Q5‰”” 4È`¾ŸŸΟ?ÄÆÆ¢Fbë ´lÙ111.7>>jµ¯¼ò :uê$NÛ¶m+²}:fÏž®]»búôé˜5k<ˆÌÌL\¼x111˜1c5j???¸¹¹áðáÃ.7,, )))˜9s&ÜÝÝѯ_??~õêÕ3(ÏÓÓ“&MB`` 8lHLL Zµj'''ƒ}VE=Ëâ½÷ÞÔ)SP§Nxzz¢oß¾ˆGzzz™–W–„„ddd`øðáhÓ¦ &Mš„ÜÜÜgÚçŸþ‰´´4Œ;uëÖE=°k×.¸ººVR­‰È\1øUSûöíÃÇ ___¬[· ÀæÍ›±fÍyápÚ´ihРöíÛ‡wß}³fÍBddd…ËÌÊÊÂÔ©SѬY3˜Ê†Ý¼D–‡ß~DdUôa…7ÆT Ñecð#"«ÄCDÖˆY ?""""+ÁàGDDDd%üˆˆˆˆ¬ƒ‘•`ð#"""² ~DDDDV‚ÁˆˆˆÈJ0øY ?""""+ÁàGDDDd%üˆˆˆˆ¬ƒ‘•`ð#"""² ~DDDDV‚ÁˆˆˆÈJ0øY ?""""+ÁàGDDDd%üˆˆˆˆ¬ƒ‘•`ð#"""² ~DDDDV‚ÁˆˆˆÈJ0øY ?""""+!3uˆª¥R •JNgêªY‰D¹\…BaêªT[ ~D•D©TB£Ñ V­ZH$¦®‘ÅÑétÈÌÌ„R©dø«" ~D•D¥RÁÑÑ666 ~DD ï-IKKcð«"¼Æ¨’èt:H¥R†>"¢ ’H$Éd¼\¦ 1øY ?""""+ÁàGDDDd%ü¨Hr¹¯½ö2.¹\޾}ûò³GDTøÍZźwïŽ~øgÏžÅþýû1bij½øòäÉpvv¸¹¹aâĉ¨Q£F¥íÿìÙ³X±b…Á¼ àâÅ‹•V†9:qâ–-[f0¯~ýú8{öl•–ÛµkWlÙ²'NœÀ?þˆ¡C‡šígoüøñprr¸ººbìØ±•úÙ#"¢< ~U¨oß¾X¼x1vî܉ÁƒcÆ xóÍ71yòdSW­Hï¾û.jÕªxøð!† ‚´´´J-ÃÛÛ¾¾¾•ºOKо}{øøø­¼>}ú`þüù İaðiÓ& 0ãÇ7ZÊcðàÁâgïÑ£Gðóó«ôÏ1øUAð¯ý K—.Å©S§˜˜ˆÓ§OcáÂ…èÙ³'¤R) Q£Fظq#NŸ>;w¢cÇŽGGGœ>}o¼ñ>Œ_ý}úô)u׊¶qãFœ:u ;vì@Û¶mÅeúòN:…o¿ýíÚµÂÙÙþþþ5jRh»òÔ³(Û·oǼyó —Ë‹\>hÐ âìٳزe êÖ­+–ŒâèÑ£øî»ïàì쌕+WâôéÓøæ›o`ggW¦sЬY3£µsçNÌ™3§Øã®_¿>¾ùæ;v þþþhݺ5`äÈ‘X²d‰¸Þ¦M›0oÞ<ñçÝ»w£S§Nûï½÷¾øâ œ9s‰‰‰8sæ –,Y‚=zˆŸ½† â›o¾Áo¿ý†mÛ¶¡C‡òÎõo¿ý†×^{ û÷ïÇÁƒÑ«W¯R—•tùË;vìÖ­[///À?üggglÚ´ #FŒ?S·+O=‰ˆ¨h ~U¤~ýúpppÀùóç æß»w#GŽ„F£T*źu댾}ûbãÆX½z5\\\öööhÞ¼9üüü°}ûv,^¼2™¬Äe‚ `ݺu8zô(úôéƒ;wbÕªU°··7(ïµ×^þ}û°|ùrØÙÙÁÏÏÉÉɘ8q" êü,õ,(44ÑÑј0aB¡eÎÎÎ6lV®\‰W_}QQQ˜>}º¸ÜÎÎuëÖŰaÜœŒüÄ;ï¼WWW 8J<‚ Àßß ¨ào¶bƒ1cÆZ&V­Z…   ¼ñÆ ÄŠ+`gg‡ .ˆÁÎÎÎuêÔƒ««+êÔ©ƒk×®ìÏÃøpá‚ÁüÈÈHŒ;Vüì­Zµ gϞŀ°eË|ùå—âïÔÎÎM›6Ÿqã°sçNÌŸ?_ü·¬¤ãÈ_ÞÀqàÀ|öÙgP(?~<’““1mÚ4üøãu~–zQa ~UÄÝݱ±±%®Ó¾}{899aïÞ½P«Õ ADDz÷î /ìØ±iiiØ¿?€¼ÿìKZæåå©TŠC‡A«ÕâøñãÈÎÎFëÖ­ ÊS©T8}ú4† †ììì*«gA‚ `åÊ•9r$7nl°,99~~~¸zõ*””„¦M›ŠË% vïÞ´´4=z))) ARR‚ƒƒÑ¨Q#(ñhµZøùùáСC%seÿ÷ÿ‡áÇ‹õÔkÛ¶-¤R)Ž9­V‹S§N!;;­ZµBdd$4 <==Ñ¡C„‡‡C©T¢nݺèÔ©._¾ µZm°?777ÄÇÇ—X///8::â§Ÿ~‚Z­Fhh("""гgO±¾»víBzz:<bëkqËJ:Ž‚å9s£F‚R©¬²zQaüÓ¸ŠÄÆÆ–ú««+nݺ­V+λyó&ÜÝÝjµIIIFƒÌÌLØØØ”¸¬^½zpssï¿þjPVíÚµ!B¡ò²²²J=–g©gQ"##±{÷nÌŸ?Ë—/çËd2Ìœ9ݺuCVVRRR ZorssÅúj4ƒÀªR©Ä»@K:@Þõ‹¦…={öà£>ÂW_}%Îwww‡««+8`°¾¾¾¡¡¡èÔ©ÜÜÜðçŸB©TÂÛÛÞÞÞ -TN\\êÔ©Sb]\]]qç΃ßéíÛ·Ÿé³WÒq‚P¨¼ÒþàxÖzQa ~UäÑ£GÈÉɯ¯¯A—ÛsÏ=‡eË–aìØ±ˆ‹‹CóæÍ!‘HÄÇÓ´hÑÂàú¦òJHHÀÝ»w1vìØBË:vìX¨}úÀÅÅ{÷îEFF^|ñE´k×?üðC¡õ?~ŒœœøøøÜ1íéé‰O?ý“'OF||<š5kfð;mÞ¼9Μ9Sác+é8¼½½ •çää„”””÷Yõ$"²fìê­"Z­_ý5>ûì3ôìÙµkׯË/¿Œ/¾ø¿ÿþ;4 ®]»†ôôt <‚ à…^@óæÍqòäÉ —{íÚ5899á7Þ€ hÕªvíÚ…Zµj”'“Éн{wŠÃfÄÇÇ‹-)÷YÙõT©TøòË/1zôhqžL&Cnn.A€ƒƒ†^¡}—t`èСhРA…ëþ,T*V¯^#Fˆó®_¿'''qÜÄ-Z`ûöíb}ÃÃÃѺuk( ÄÇÇãÊ•+èܹ3´Z-¢££ •¡Õj±aÃ,Z´/¿ü2j×®nݺaéÒ¥ F£ÁõëבžžŽ7ß|‚  sçÎhÖ¬Ù3…ù’Ž#y2™ ]»vÅ?ü ~öàææVä>+»žDDÖŒ-~UèèÑ£ÈÊÊ„ ФIÄÇÇã§Ÿ~B`` €¼®Ë>ø .ÄÌ™3?þ ptt¬P™*• ³gÏÆ¼yó0gÎÜ¿þþþâÐùË»uë.\ˆŒŒ À¶mÛ0oÞ<œ|8RRRðèÑ£ ×ýY„……á?þÀ+¯¼ ¯»ò£>œ9s0kÖ,<|øÿùÏÄßYff&¢££ ¯{>)) ·nÝ*¶Œ   dggc̘1âgïçŸÆîÝ»äýNç΋?þÓ¦MCtt4,X€ÄÄÄ ÿNK;}yS§NÅíÛ·±dÉñ³÷ŸÿüsæÌApp°Á UQO""kfÊÑ\%E¼—䛤ù^mžNrЧ“=_wéÒÅ+ÿ5@D¦šš q¸""*?Fc–Ü ‚€K—.]0@&€,ʧ“ €ú餠Ë÷ªŸïµà{£aW/‘•`ð#"""² ~DDDDV‚ÁˆˆˆÈJ0øY ?¢J"•J¡Õjņ‰ˆ¨|t:´Z-GG¨BǨ’( ddd Fâã㈈¨ì´Z-222 P(L]•j‹Á¨’ØÛÛC"‘ -- ÆÔÕ!"²8R©vvv°³³ƒJ¥2uuª%?¢J¢R©`gg‡š5k²Åˆ¨´Z-rssúªƒQ%R©TüÂ"""³Åf """"+ÁàGDDDd%üˆˆˆˆ¬ƒ‘•`ð#"""² ~DDDDV‚ÁˆˆˆÈJ0øY ?""""+Á'wUNgê*Y‰Dbê*T{ ~D•D§Ó!''*•ŠÁˆ¨$ är9lmm«ƒQ%ÐétP*•ËåhÒ¤ lllL]%""‹£V«ñàÁ(•J( †¿*ÀàGTIÔj5žþy¨Õj¨T*SW‡ˆÈâH$4lØ·o߆B¡0uuª%ÞÜATIt:4 »y‰ˆ*H§ÓA«Õò{´ 1ø=£ü_Pü²""z6üN­Zìê%ªD:Ž_TDDπߡU‹-~DDDDV‚ÁˆˆˆÈJ°«—¨±«—ˆèÙð;´j±ÅˆˆˆÈJ°ÅÏÌ={VË(>>ׯ_ǺuëS¦í'OžŒ}ûö!99¹ÄõqôèQ¼ôÒKÏ\çò>|8>øà€ -f#FŒÀ½{÷ŒZŸªôóÏ?ãÉ“'˜>}ºÁ|…B={ö 22³gÏ.u?nnn˜6mÚ·oµZÐÐPlÞ¼YYYâ:>>>1bž{î9lP—÷Þ{=ª¼$""³Çàg† ‚û÷ïÃÕÕo½õ0tèP$%%•ºí»ï¾‹   RƒŸ©ìÞ½»wï¬^½aaaسg‰kUq¥uõº¸¸àùçŸGDD„8¯{÷îP*•âö¥Y¼x1._¾Œõë×ÃÎÎï¿ÿ>¦OŸŽÕ«Wzöì‰3f`ýúõ¸ví7nŒÙ³gÃÉÉ ;vì(T_""sÂ索ÅàgAâââ°e˸¹¹a„ âôƒ °aÃаaCܺu ‹-B||<áìì l߾Ů«÷æ›oâ½÷ÞƒJ¥ÂŽ;ÄVÒvýû÷ÇÔ©S!•J†/¾øjµ 4À¢E‹Ð¢E Ö1…††¢_¿~Á¯oß¾ EãÆãÇG:u°jÕ*yǽk×.¬X±7oÞDóæÍ1oÞ>>ëÖ­ÃÑ£GѧOìܹ«V­‚½½}™3((/¿ü2¤R)ÀËË ‰þù'ÀÁÁ¡Èú–T¶ ð÷÷Ç€*åwQ^gΜA¯^½ “åýÍåææ†çŸ—/_× ÆK/½$w«V­ ‘Hpýúu¨ÕjüùçŸøä“OЮ];‚€¤¤$„‡‡ÜÝÝáàà †>½Ç#** Í›77Ò‘‘5zùå—Ñ¿ÿR§=z˜ºªV‹ÁÏÅÇÇÃÍÍ œœ ???\½zHJJBÓ¦M‹Ü®´u% 6oÞ ¥R‰ˆˆ£_¿~%n§T*‘““#þ¼fÍœ;w^^^J¥8tè´Z-Ž?Žììl´nݺÌÇ„„ñ¯Ç^½záøñãÐjµòZ·ŠªoIekµZøùùáСCå?ñ• ** ±±±âµ”¯¾ú*Μ9cðlßÈÈH$&&¢}ûöòþ‚>sæŒØý±`Áœ;w³gÏÆž={0aÂÔ¨QàêêjЂ›_BBêÖ­[•‡GDVî믿6èÑ(Jdd$Ö¯_o¤QAìêµ@uêÔAll,@&“aæÌ™èÖ­²²²’’"¶&TÚºZ­Ö 4ܾ}]»v-q;•J…?þÓ¦MÃÂ… qìØ1|÷Ýw¨W¯ÜÜÜð믿Ô¡víÚå:ÖãÇ£wïÞ C¯^½°páÂRë[ZÙ>,W*Û±cÇЯ_?œ={}ûöÅ_|Qè¼£{÷î¸rå ºuë†åË—‹ËrssqäÈ9ržžž=z4,X v¿»¸¸Y®»»;ž¸ººB¥R!;; …×®]ƒ““Þxã ‚€V­Za×®]¨U«V¹ŽùþýûHJJ‚ŸŸ‚‚‚ ÕwÊ”)…ê[ZÙC‡Eƒ ÊUÊ”žžŽ‹/bæÌ™b€+èáÇHNNƻヒàà`q~NNf̘ÂÑÑžžž3fŒø‡€V«ÅæÍ›1wî\tíÚ¡¡¡hÛ¶-Ö®]‹;v 55Õ‡HDV.>>Þ ä%$$`Μ9âêd:lñ³{÷î…N§Cll,®_¿???q(—cÇŽÁÇLJƃpêÔ)ôë×OÜvÛ¶m˜7oNž<‰ï¿ÿ¾Äu322pýúu9rjµ[·nÅ•+Wð×_»Ý“'O°ÿ~lذuêÔÁŸþ‰5kÖ@¥RaöìÙ˜7oæÌ™ƒû÷ïÃßß¿BÍûAAA˜1cFe0_£ÃáÇ‘››+Ö@±e ‚€áÇ#%%ŤcØ;v +V¬À‰'Š]çôéÓ˜8q"¦M›&ÎKMMÅ‚ 0yòdL™2J¥áááøê«¯ÄuNž<‰ììlŒ1žžžˆ…T*5¸üýý þ²~ÿý÷qçÎJÝC/++ óçÏ7QÍŠW7LÔ¨Qßÿ=ÂÃñÿ~^èLDV…ßyU‹ÁÌVzz:^ýõ"—©Õjœ={ÖÈ52ŽŒŒ 2ÄÔÕ "¢jˆwõY ?""""+ÁàGT‰Ìåî3""KÅïѪÅàGTIô_VüÒ""ª~V=ÞÜAôŒ$ t:d2bccáææ©TjêjYFƒØØXñy𠀕Á¨’ÈåräääàþýûŽ€ˆ¨$ ¤R)lmmM]•j‹Á¨’迬úˆˆ*Nþ¨j0øU}w/¿¬ˆˆ*»y«ƒQ%Éÿ%ÅV?"¢òcØ«z ~DU€_^DDdŽ8œ ‘•`ð#"""² ~DDDDV‚ÁˆˆˆÈJ0øY ?""""+ÁàGDDDd%üˆˆˆˆ¬p&ªDJ¥*•ŠOî "ª‰D¹\…BaêªT[ ~D•D©TB‘œ÷Ö IDAT£Ñ V­Z|rQèt:dffB©T2üU?¢J¢R©àèè?"¢ Ð÷–¤¥¥1øU^ãGTIt:¤R)CQI$Èd2^.S…üˆˆˆˆ¬ƒ‘•`ð#"""² ~DDDDV‚wõ’Ù8{ö,Fû÷ï‹ó:vìˆÅ‹cðàÁÞïäÉ“±oß>$''WF5Ë­uëÖ;v,’““ñå—_\\\0|øp<÷ÜsHJJÂpóæMôìÙo¿ý¶Áö‚ ૯¾ÂÇ2™ Æ ƒ——ÒÒÒðË/¿àêÕ«…Ê-ËzEÕˆˆª/?ªöÞ}÷]™$øuèЃƩS§àíí-Ο0a"""°}ûv´hÑ“'OÆ’%KŒàà`q=Ìž=ñññâ¼!C†@¡P`éÒ¥¨W¯¦NЏ¸8DGG”]ÚzÅÕˆˆª/võ’EiÔ¨6n܈ӧOcçÎèØ±£¸¬ÿþ8tè~ùå,Y²666 „³³3üýý1jÔ(@³fÍŒ6>TJJ V®\‰ˆóA@ll,Ž;†ÌÌL\¹rÉÉÉpww/´ýk¯½†àà`(•J€B¡@—.]°oß>dggãÞ½{ ÁK/½d°]YÖ+ªnDDT½1ø‘ÅJ¥X·n‚ƒƒÑ·o_lܸ«W¯†‹‹ jÕª…E‹á£>ÂàÁƒ‘‘‘øùù!99'ND@@A€¿¿? `”:GEE!33Ó`žV«ÅŽ; prr‚³³s¡æææ†V­ZáÌ™3â<¤§§#55Uœ‰zõêl[–õŠªUoìê%³²wï^ƒ;% ?~ hß¾=œœœ°wï^hµZ„„„ ""½{÷ÆÁƒ‘““ƒ¦M›"** kÖ¬)rÿZ­~~~ˆ5Êñ”F&“a„  BNNŽÁ²~ýúá÷ßGVV–8¯fÍš?@ff&jÖ¬i0¯¬ë‘ua‹™•!C†ÀÇÇGœ¦M›&.suuÅ­[· ÕjÅy7oÞ„»»;T*>þøc¼ýöÛ8uê>ùäÔ®]»È2>|•JUåÇR‰D‚Q£F!55¿ýö›Á2´k×§N2˜Ÿ™™ùÿíÝ{|Õáÿÿ÷ÎnÂn !n¼^*^¢À§`­­\ZQ*"A¥Š[ÔúS¤Å[«­mµ´Ô¯hù¼ – ^¹4ª@A?ZAEîäž%Én6»³¿?`—MHB›ì&ózú8ÙÝ™93gYß9gfV.—«ÖkIII:zôh³–X ÁmFAAúõëWë'ÑÎ?ÿüpïݶmÛ4yòd9Riiiš4iRŒjÚ47Ýt“RRRôâ‹/žôóDßûÞ÷´yófUTTÔz½¨¨H©©©JII ¿vÎ9稠  Yˬ…à‡6cÇŽ:zô¨F-Ã04pà@õë×Ok×®U=´dÉeeeÉçóÉãñ„/à(,,¬uáĸq㔫Ý$ >\}úôÑܹså÷ûkÍKKKÓå—_®wß}7üÚÕW_­ŒŒ y<}ðÁ3fŒ\.—Î>ûl 2D›6mjÖrká?´~¿_÷ß¿f̘¡©S§êСCš6mšŠŠŠ$I¯½öšž{î9eddhûöíáóüæÏŸ¯éÓ§kíÚµš3gŽrssUVV¦ýû÷Çd?RRR4jÔ(™¦YëÞyK—.Õúõë5lØ0mÙ²En·[Ò±«€¯¹æUTT¨¨¨Hÿûß•››«_üâ:zô¨-Z¤4{9€uØN½H«lÛ1 {Ä4áxI”ä<^’$%KúÓ€úGž÷ÄByy¹ÒÓÓe·Ûc]h³€Š‹‹•ššëªÔb†¶nݺSÒ}’*%UIò/>I5ÇK@R0b*Š˜Ö}Üjê°‚€Eü,‚à`?‹ øQb·ÛešæI7c4M0”išÜ¡q? JœN§***Ô±cGSÀé2MSáð#ú~@”$%%Éf³Éív+ĺ:ÐæØív¹\.¹\®¸øMõöˆàD‰Ïç“ËåR§Nèñ€f0MS~¿ŸÐׂ~@ù|>¾°q‹n ‹ øXÁÀ"~Að°‚€Eü,‚à`?‹ øX?ÙD‘×ë•ÏçS0ŒuU Í±ÙlJLL”ÓéŒuUÚ-‚%^¯W@@)))²Ùl±®´9Á`P•••òz½„¿Bð¢Äçó)55U ?h†Ðh‰Ûí&øµÎñ¢$ Ên·ú ™l6›§Ë´ ‚€Eü,‚à`?‹ øÅ‰üü|mÙ²E[¶lÑÛo¿­ßþö·êÖ­[“ßçw*--í”Ë¥¦¦jóæÍgRÕfËÏÏ×o~ó›Z¯eggëý÷ßI}°‚_;v¬¨þð‡úòË/õòË/«K—.MzïÍ7߬”””®á™»üòËõÍo~3ÖÕÀ’~q¨  @sçÎÕ?þñÝ~ûíá×G¥… *??_sçÎUff¦$iáÂ…JKKÓ¼yó4qâÄF— ùÁ~ Õ«Wë­·ÞÒ¸qãN¹ I9r¤–-[¦·ß~[?þ¸$ëµ›3gŽÖ­[§—^zI_|qƒûö /húôéJLL¬w~CÛOMMÕ† tà 7håÊ•š={¶ÒÒÒôôÓOkýúõzöÙgår¹Âëi¬N}ûöåþPK"øÅ±5kÖ¨ÿþ’¤´´4?^O?ý´† ¦={öèî»ï–$ååå©´´TwÜq‡^~ùåF—•¤„„]rÉ%5j”~úÓŸjòäÉÊÉÉiô})))zøá‡õàƒjôèѪ¨¨Ð Aƒd†fÍš¥•+WjèСZ°`žyæ%%%Õ»Oï½÷ž:T+ІœªÞ.—K™™™?~¼JKKõ·¿ýMo¾ù¦ÆŒ£¬¬,Ýpà ’Ôh Ãмyótýõ×G§‘hC~q¬°°P]»v•$•––*//O}ô‘’““URR¢>}úÔû¾S-k³Ùô—¿üE^¯W»wïÖ† 4bĈFßçõzU]]~>sæLmܸQýû÷—ÝnײeËdš¦Ö¬Y#Ç£‹.º¨Þº†¡§Ÿ~Z&LPïÞ½O»Þ‹-’ÛíÖÊ•+UVV¦Í›7«¤¤D6lP¯^½$©Ñ:™¦©¼¼<-[¶¬™­@ÛÅO¶Å±ŒŒ 9rD’äp84uêT]uÕUªªªRYY™Žú›ïTËš¦©ÂÂÂðóÿüç?2dH£ïóù|š6mš¦L™¢3fhÕªUš={¶ºwï®®]»jÅŠµêÐØ¹‰_}õ•-Z¤Ÿýìgúõ¯Ýäzûý~UUUI’€<OxžÏç“aû;æTuÚ·o_ƒu =#øÅ±áÇkçÎáǃÖ­·Þªªª*}ç;ßÑwÞÙàû[Ö0 eee…Cå\ ÂÂÂS¾oÛ¶mšŸ<œN§vìØ¡Î;ëºë®“aºð õÊ+¯œò cŸÏ§ßþö·ºå–[¯ªÞMuª:7NÙÙÙÍZ7m=~qdñâÅ ƒ:räˆvîÜ©¼¼<•””H’V­Z¥AƒiùòåÚ»w¯Ö­[§#F„ß;þ|MŸ>]k×®Õÿþïÿ6ºlEE…vîÜ©·ÞzK555úë_ÿª>ø@üqƒï;xð ^{í5=÷ÜsÊÈÈÐöíÛ5sæLù|>Ýwß}š>}ºxà}ýõך7ožÜn÷)÷÷½÷ÞÓ¿ÿýo]{íµMÚǦj¬N†a(77WeeeÚ¿ÿi¯€¶Ì'Û¶ELCÅ1M8^%9—$IÉ’þ4`À€þ¦i¶Rµú•——+==]v»=ÖU€6+¨¸¸X©©©±®J-†ahëÖ­;%Ý'©RR•$ïñâ“Ts¼$#¦¡¢ˆiÝÇ­†¡^‹ øXÁÀ"~Að°‚%v»]¦i*ŒÉ…ZÐæƒA™¦ÉÝZ÷ñ¢Äétª¢¢B;v ÿ| éLÓTEE…œNg¬«Ònü€(IJJ’Íf“ÛíV ˆuu Í±Ûír¹\r¹\òù|±®N»Dð¢ÄçóÉår©S§Nôø@3˜¦)¿ßOèkA? Š|>_X€¸E·€Eü,‚à`?‹ øXÁÀ"~Að°‚€Eü,‚Ÿl¢ÈëõÊçó) ƺ*ÐæØl6%&&Êétƺ*íÁˆ¯×«@  ””Ùl¶XWÚœ`0¨ÊÊJy½^Â_ !øQâóù”ššª„„‚4Ch´ÄívüZçøQ e·Û }ÐL6›M‡ƒÓeZÁÀ"~Að°‚€Eü IÊÏÏWïÞ½k½–““£e˖ŨF Ú~AðC“9RË–-ÓÛo¿­Ç\ ’¤ììlÍ™3GëÖ­ÓK/½¤‹/¾X’”ššªõë×k„ Z·n.½ôÒðk×]w–/_®+VhèСámŒ5J .T~~¾æÎ«ÌÌÌðº6lØ n¸A+W®ÔìÙ³•––¦§Ÿ~Zëׯ׳Ï>+—Ë^OCu’¤¾}ûr(€%üÐ$)))zøá‡õàƒjôèѪ¨¨Ð Aƒd†fÍš¥•+WjèСZ°`žyæ%%%I’’““Õ«W/åææê“O>‘$%%%©_¿~ÊËËÓ /¼ G}T‡Ciii?~¼ž~úi 6L{öìÑÝwß®ƒËåRff¦Æ¯ÒÒRýíoÓ›o¾©1cÆ(++K7Üpƒ$5Z'Ã04oÞ<]ýõ­ˆ1‚šÄëõªººZ}úô‘$Íœ9S7nTÿþýe·ÛµlÙ2™¦©5kÖÈãñ袋. ¿wöìÙ*((ßï—t,˜½ôÒKr»Ýzíµ×$IYYY*--U^^ž>úè#%''«¤¤$¼=éØ=-Z$·Û­•+Wª¬¬L›7oVII‰6lØ ^½zIR£u2MSyyyœ»°$~² auqÂ0Nü]àóù4mÚ4M™2E3fÌЪU«4{öluïÞ]]»vÕŠ+j½·K—.’$¿ß/·Û]k^MMJJJ$I@@•••JHHÃáÐÔ©SuÕUW©ªªJeeer8N|Dý~¿ªªªÂïóx<µêªï©ê´oß¾Ó?8´?H’>¬Þ½{kÏž=á×z÷î­C‡…ŸoÛ¶M“'OVjjª{ì1Mš4IùùùÚµk—n»í¶“Ö™ššzZu>|¸¬[o½UUUUúÎw¾£;ï¼ó´÷¥¨¨¨Á:`e õB’´téRÝÿýÊÉÉQJJЬ»îºKK—.•$õèÑCK–,QVV–|>Ÿ<œN§vìØ¡Î;ëºë®“aºð õÊ+¯(%%å´ëàp8ä÷ûe†’““•››Û¬}9UƧìììf­€¶Œ?H’^y噦©3f¨[·n:pà€þçþ'<\zðàA½öÚkzî¹ç”‘‘¡íÛ·kæÌ™òù|ºï¾û4}út=ðÀúúë¯5oÞ<¹ÝîÓîñ[µj• ¤åË—kïÞ½Z·nFŒqÚûÒX ÃPnn®ÊÊÊ´ÿþÓ^7m™íÔ‹´Ê¶mÓP±GLŽ—DIÎã%IR²¤? 0 ¿iš­Tm ~åååJOO—ÝnuU Í *..>í΃–f†¶nݺSÒ}’*%UIò/>I5ÇK@R0b*Š˜Ö}Üjê°‚€Eü,‚à`?‹ øQb·Ûeš¦‚Á˜\¨m^0”išÜ¡q? JœN§***Ô±cÇZ?whÓ4UQQ!§Ó몴[? J’’’d³Ùäv»b]hsìv»\.—\.—|>_¬«Ó.ü€(ñù|r¹\êÔ©=~Ð ¦iÊï÷úZÁˆ"ŸÏÇ nÑ-`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹à'Û€(òz½òù| ƒ±® ´96›M‰‰‰r:±®J»Eð¢Äëõ*(%%E6›-ÖÕ€6' ª²²R^¯—ð×B~@”ø|>¥¦¦*!!àÍ-q»Ý¿Â9~@”ƒAÙívB4“Íf“Ãáàt™Dð°†z@T9NÝxãºâŠ+är¹$IUUUúðÃõæ›oÊãñĸ†ÖEðQãt:õÐC)++«ÖëIII2dˆúöí«gžy†ð#?5£GVVV–öìÙ£^xAEEE’¤ôôtÝzë­:ï¼óôƒü@‹-ŠqM­‰süP¯üü|mÙ²E[¶lÑš5kô«_ýJ;wŽuµší‰'žÐ¸qãb] h÷rrr$I/½ôR8ôIRqq±,XPk´>‚4vìX 8PcÇŽ•ËåÒC=ë*â\蜾‚‚‚“æ…‚`RRR«Ö 'üpJeeeZ¸p¡~mÔ¨QZ¸p¡òóó5wî\eff†ç9RË–-ÓÛo¿­Ç\ ¾~Ë-·èÉ'Ÿ ¿wþüùzøá‡ÃÏ_ýu 0@’Ô«W/Í™3Gëׯׂ Â1¦¦¦jýúõš0a‚Ö­[§K/½TýúõÓK/½¤üãzê©§äpœ8«¡oß¾Ü `I?4Iä½éÒÒÒ4~üx=ýôÓ6l˜öìÙ£»ï¾[’”’’¢‡~X>ø F­ŠŠ 4¨Á×7mÚvIIIÊÈȺ¬¬,eddhûöí²Ûíš5k–6lØ áÇkΜ9úýï¯ôôtIRrr²zõê¥ÜÜ\}þùçúÃþ 7ß|S×^{­Ö­[§ï~÷»’$Ã04oÞ<]ýõ­yøÀ2¦Nª©S§6{>Zwà”ºt颼¼“išáú}úé§êÖ­›$Éï÷ËívK’ºvíªÏ?ÿ¼Öß>~¼oß¾–=pÄ)†zÑ ±cÇjРA>|¸{ì1•——K’†®ÁƒëÖ[oÕ­·Þª7Þx£Öû¶mۦɓ'käÈ‘JKKÓ¤I“}}óæÍÊÉÉQÿþýµmÛ6mÙ²E—]v™.»ì²pð+((P¿~ýj 9ŸþùõöÜé‚ .¨µl÷îÝ£yhõX³fÖ¬Y£ÒÒÒ—)-- /‡ÖGðÃis8òûý2 CÉÉÉÊÍÍ ÏëÑ£‡–,Y¢¬¬,ù|>y<9Î_—¤-[¶èßø†œN§ ´mÛ6 8P¦iêàÁƒ’¤;vèèÑ£=z´ ÃÐÀÕ¯_?­]»ö¤ú}ôÑGòz½áe¯½öZþùáùãÆSvvv %°žaÆiذaJKKkp™´´´ðrh} õâ´­ZµJƒ Òòå˵wï^­[·N#FŒ$I5ÇK@R0b*Š˜Ö}ÜjèñQA_ü#ø€¨øÎw¾Së†ùõ ãç÷ûµtéÒVªB¸¸DÅÚµkå÷ûO¹œßï¯÷â<´_¬«Ó.ü€(ñù|r¹\êÔ©=~Ð ¦iÊï÷úZÁˆ"ŸÏÇ nÑ-`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹à'Û€(òz½òù| ƒ±® ´96›M‰‰‰r:±®J»Eð¢Äëõ*(%%E6›-ÖÕ€6' ª²²R^¯—ð×B~@”ø|>¥¦¦*!!àÍ-q»Ý¿Â9~@”ƒAÙívB4“Íf“Ãáàt™Dð°‚€Eü,‚à`\Õ‹¸“ŸŸ¾š«¼¼\ï¿ÿ¾~ÿûß«¬¬¬Yë»óÎ;µdÉ•––F³šM–™™©±cÇêÜsÏÕÑ£GµbÅ mݺõ”󇯝þýûËívëí·ßÖG}^¯ÍfÓèÑ£uå•W* *??_ï¼óNLöÐ6Ðㇸ4vìX 8PcÇŽ•ËåÒC=ÔìuÝ|óÍJII‰bíNÏwÞ©ƒê±ÇÓ«¯¾ª¼¼Ú‚âZYY™.\¨Áƒ‡_ëÕ«—æÌ™£õë×kÁ‚ÊÉÉ‘$¥¦¦jýúõš0a‚Ö­[§K/½T .TZZšæÍ›§‰'J’úöíÛj÷‡2 Ck×®Õ[o½¥ªª*}úé§*((PVVV£óœN§  %K–ÈãñèË/¿ÔæÍ›ÃÇÁápè¿þë¿´hÑ"=zTгÏ>«½{÷¶Ê~Ú&‚â^ä}ñìv»fÍš¥ 6høðáš3gŽ~ÿûß+==]’”œœ¬^½z)77WŸ|ò‰òòòTZZª;î¸C/¿ü² Ãмyótýõ×·JÝMÓÔûï¿/¿ß/‡Ã¡(55U_|ñE£óÒÓÓuôèQ•——‡×õÕW_…{üÒÓÓUUU¥K/½T<òˆ}ôQ}ãßБ#GZe¿mçø!®uéÒEyyyÚ´i“$éÒK/Uçεxñb™¦©Í›7k÷îݺöÚkÃç·Íž=[n·»Þõ™¦©¼¼¼VHééézüñÇ%IsçΕÇãit^§NTUUUk•••êÔ©“$©sçÎÊÈÈPŸ>}ôÇ?þQéééúÑ~¤’’}üñÇ­´W€¶†à‡¸´xñbƒA•——ë½÷ÞÓÌ™3%IYYYúì³ÏdšfxÙO?ýTݺu“$ùýþC_Ⱦ}ûZ®â (..ÖOúSwÞy;v¬l6›vîÜÙ༲²2¹\®ZëHJJÒÑ£G%IUUU²ÛíZ´h‘ª««UYY©õë×ëòË/'øDðC\;v¬¾þúë“^/((P¿~ýd³ÙÂ?ésþùçkýúõ­]Å&IJJRvv¶>ÿüs™¦©]»viË–-ºä’KôÅ_48ïõ×_WjjªRRRÂAöœsÎQAA$©¨¨H@ VàT8ÇmÊŽ;tôèQ=Z†ahàÀêׯŸÖ®]Ûà{ Ã=‚’4nÜ8egg·Fue³Ù4eÊ]}õÕr:êÝ»·®¼òJíÙ³§ÑyG|ðÆŒ#—Ë¥³Ï>[C† y{<mß¾]cÆŒQbb¢zöì©k®¹F~øa«ì m¢ÇmŠßï×ý÷߯3fhêÔ©:tè¦M›¦¢¢"¥¦¦ÖûžùóçkúôéZ»v­æÌ™£ÜÜ\•••iÿþý-^ßÊÊJÍž=[7Þx£n¼ñFUTThÓ¦MÚ¼y³‚Á`ƒó$éïÿ»rssõ‹_üBGÕ¢E‹tàÀðº/^¬qâ²t IDATãÆé׿þµªªª´zõj†y²z‘VÙ¶-b*öˆiÂñ’(Éy¼$IJ–ô§ôgÈ ±V^^®ôôtÙíöXWÚ¬@  âââÿ˜Ã0´uëÖ’î“T)©J’÷xñIª9^’‚ÓPQÄ´îãVÃP/€Eü,‚à`?‹ øXÁˆ»Ý.Ó4Ã7–œž`0(Ó4¹;B â>~@”8NUTT¨cÇŽ2 þ¦€Óeš¦***ät:c]•v‹àDIRR’l6›Ün·@¬«mŽÝn—Ëå’Ëå’Ïç‹uuÚ%‚%>ŸO.—K:u¢ÇšÁ4Mùý~B_ "øQäóùøÂÄ-º%,‚à`?‹ øXÁÀ"~Að°‚€Eü,‚_îZQ0<å26›­j°"‚ÐÂBa/ÈãñÈëõª¦¦F¦iÊ4MIÇžar8²Ûíá×¢Å0 †!»Ý®„„%&&0À‚~@ ƒ *//—ÇãQff¦zô衤¤$%$$Èn·+Èï÷«ªªJ%%%*))‘ÃáP‡d³Ù¢ЂÁ`¸x<UVVªC‡JJJ"€…ü€ê嫨¨Pyy¹²³³•-Iòûý2MSÕÕÕ ƒáp—””¤””sÎ9:räˆ:$§Ó)‡ãØ?Óh4Ó4e·Û USS£²²2%%%©C‡g¼n@ü#øQêY+//—ßïWNNŽÂA¯¡åMÓ”ßï—ÍfSff¦ÒÒÒ´{÷ny½Þp0;Óðò =ªªª’išr¹\g´n@üãª^ Š"C_BB‚.»ì2Ij0ô5´ŽÐò\pœNgøyS×Ñ¡óý:tè êêjy<ž¨­Ÿ~@”UVV*¨OŸ>ª®®V ¨uŽ]SK Puuµz÷î-éØq´Ùl¶ðù„^¯WÕÕÕQß ~ü€( …5·Û­ /¼0øÎt~¿_}úô‘×ë•išQíõ“Ž…?»Ý®ÄÄDUUUE}ý€øAð¢ rˆ·gÏž²Ùlá[µœ©Ðz²²²äóù¢>ä+èù3 CUUUQ]7 ~ü€(1MSGݺu“ßïoÖðnCÅï÷+333üZ‚aJLL<­óm Á§-???|ÞYHNNŽ–-[µmtïÞ]Ï<óŒÖ¯_¯Õ«Wë‘GQrrr“ç×WÇ–º?^FFF‹œ‹';Ç/---*[Bèª_ŸÏ×"ëÄÁqéw¿û¾úê+7N“'OV=ôÀ4y~cúöí+§Óµº†B˜ÇãQZZZø<¼hÓ4•’’¢šššZÛ¦Ðoh€ö…à‡1räH-[¶Lo¿ý¶üq%$$H’²³³5gέ[·N/½ô’.¾øâ“Þ›˜˜¨‹.ºH/¿ü² µwï^=úè£Z³fM“æ7Æ0 Í›7O×_}twXRMMMx?[ŠÃáˆÚ¹ƒõ ýt\ h±mb‡à‡¨KIIÑÃ?¬|P£GVEE… $Ã04kÖ,­\¹RC‡Õ‚ ôÌ3Ï())©Öû}>Ÿ¶nݪ§žzJ9992 CÅÅÅú׿þÕ¤ù1MSyyyQ–Ž\·Ãáh±aØ`0(Ã0Züü;Ã0Z4\b‡à‡¨ Ý®OŸ>’¤™3gjãÆêß¿¿ìv»–-[&Ó4µfÍy<]tÑE'­ãž{îѺuëôóŸÿ\«W¯ÖücuêÔ©Éó³oß¾¨ŸÃŠ ý*FK±Ûí-Êl6w@;EðC³Ôýé°ÈÀãóù4mÚ4ÝtÓMZ·nyäuéÒEÝ»wW×®]µbÅŠpq:êÒ¥ËIë÷ûýzýõ×5vìXÝu×]êÝ»·~õ«_5y~,´F( QùÍÞÆ„zíßî8m‡>éŠÙÞ½{ëСCáçÛ¶mÓäÉ“5räH¥¥¥iÒ¤I***Ò®]»tÝu×Õ*«W¯®µ®nݺiÔ¨Qáç_~ù¥ž{î9åää4iþ©Œ7NÙÙÙ§½ß§bFøŠÞ–¸¸CR‹Ÿ{×Z=—€ØàÛ§méÒ¥ºÿþû•““£”” |X—\rI‹ É:}úé§êر£ìv{‹¿@ Ç£ôôt®ì€í%ø1Ô œ¡Pø²ÙlJJJÒ‘#G¢>ºeMBBBxÝ-ÑÛçóùÔ±cG®ê€vŠàDA¨÷---M‡–išáÛ¢œi ­§  @‰‰‰-ÒÓ ”””Dð€vŠàD‘išJOO×þó†qÆÍf³Én·ëË/¿”Óél‘óîBÃÔÕÕÕáß´O? B½p¡áÞ:è‹/¾Ãáhvø ýnî×_¾j8r;Ñ }^¯W;vlÑ_ÄÁˆ’P 3M3|SêO>ù¤VhkêzBçòíÚµK555r:áÄh…>Ó4å÷ûåñx”œœ¬äädzû ãf]@ êÒ¥‹*++µcÇeff†omšføŠÙÐ9|Ò± 8Bá®°°P………êСƒ£v±H乃>Ÿ/\Ï„„„¨ÿŒ þü€( …¸ÐÅIIIêÝ»·Š‹‹õÑG©sçÎêÒ¥Kø|=»Ý®@ Ó4UUU¥òòr•••ÉápÈår…_èb‘кOWhH7 ª¦¦FÁ`P;vTJJŠjjj}`? Ê"‡bCa+==]:zô¨öíÛ§šššZ=6›M†a„Ã`輻м3ÞµÛí2 C JKK“Ëå’ßï—×ëåœ>°‚Ðêµ@  `0¨¤¤$uìØQ†a( Öº'_d©ûú™ ÌÐ-[<,ˆà´ º¡-ò~y‘Á«îr‘7… Z~@ ‹ q…½S½À™"ø­ˆPˆ%îã`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹ øXÁÀ"~Að°‚€Eü,‚à`?‹ øX„#ÖˆgÁ`0ÖU@”Øl¶ÓZž¶o?h{ë¢í­ëtÛÞJ~uƒAUWWËçóñ%ÐŽØl6%&&ªC‡ ~!Ðöímo]´½u5¥í­Šà! Êëõ*11Qçž{®b]%DIMMöîÝ+¯×+§ÓyÒmß~ÑöÖÕÔ¶·wꪞ— —Ù£š"Úü^·Šw¬–÷è‘zÛÞÊ~uÔÔÔè¼óÎSMM|>_¬«ƒ(±Ùl:묳ôŸÿüGN§³Þehûö‰¶·®¦¶}Fÿ¡òÉ)¯§º•kˆ–bØœJ»øZʱÁ¶·*‚_Á`P@€.ÿv& Ê4ÍFÛ•¶oŸh{ëjrÛÛ“˜­X3´´@0(›#™ÓõàªÞã"?|PÚ§†Ú˜¶oÿh{ëjJ{›´}»dòï»^ôøÕ# ò!i‡šÒ¦´}ûDÛ[WÓÚþXAûB›Ö?‹ ø¡ÕuèÐA£Fâ„[‹ãs­¡Þz4gÈg„ š4iR½ó}ôQ½ÿþû§]I“&iãÆÚ½{w½ó‡ ¢qãÆéì³ÏVII‰V­Z¥Å‹Ë4ãï$åÈ}ÉÌÌÔ„ ´sçN}ùå—­V‡–îëÖ­›~ô£éÒK/U ÐÖ­[õ—¿üEååågRÕÓÂçàÔÚëPocmߣG½ð ºýöÛµÿþXW5fšÔ¦q8Ö{åÅ}5òš:«[†ÊÜÚ°åc­Èß*ÓŒ¯zJÒ˜CôïwkÏ#±®Jmñw¨âÁ/JÞzë-åççK’¦OŸ®Ã‡ëÅ_”$5k£FÒÞ½{ë ~#FŒÐý÷߯ŋëå—_Ö\  &(--Mþ󟛿#-$r_öíÛ§ñãÇǺJQñÄO¨ªªJ¿ûÝ˜¨Ûo¿]>ø }ôÑVÙ>Ÿëjkm¦»zÀźcÌp­Èߪ7ÖlVŸ^=tãÐÿRjÇ$-|kC¬«w’aƒ/ס‚’ø ~¨—=†Û¶ÕóØQŒˆ©=¢8Ž—I‰’¾ß³gÏ®ÑúK½ººZiii§ý—uuµÜn·Ün·¾ûÝ練°P«W¯–Ûí–ßï×Yg¥GyDS§NÕ·¿ýmíÝ»WGŽûG2räH=öØcÊËËSß¾}õá‡êùçŸWZZš®ºê*eggëŸÿügx[‰‰‰úõ¯­%K–èùçŸ×ôÑGÉëõêÆoÔ²eËTSS£^½zé‘GÑO~ò]sÍ5:räˆ8 =zèõ×_מ={ôÈ#hÒ¤I2 C;wîltž¤F÷#´½©S§jèС:tè8 W^y¥Ö¾|ñÅzýõ×µ~ýz•——7«žÍa³ÙTZZª:„ŸŸIÛwîÜYwÝu—þøÇ?jË–-úúë¯õñÇËï÷ë³Ï>“$}ÿûß×}÷ݧÿøÇ4h>ùä•——ëî»ïÖäÉ“µ|ùrI’aZ¼x±|>Ÿ>ûì³F3ŸƒÓÿD»íc­)mït:5zôh-]º´Ñã+ÕÿT]]ݤÏa¼kJÛ»Î7~ ‡¼ã&­ÈߦÅïlÒ‘â2}úå>Uûj4bÈåz÷_Ûå˜ê‘ÕE÷N¼A·Þø]}ó² TXæÖá¢2uMï¬?ÿò'Ú¤X÷L¼AcG ‘aúì«Γ¤î™]tï-7èÖÑ×jÐ%ýt° D…¥nI:±½Ñ×ꪜ‹TPR®ÃEezöá»”Ú1Iú÷U÷¬.Ú²sW,_-6›Mž=Ûlûæ¬ïàÁƒ’VIª9^üÇK@’y¼„>Mqò©ªsüZÃáÐSO=¥ýû÷ëG?ú‘6nܨ_þò—JMMU·nÝtß}÷iáÂ…ºûî»%IC‡ÕäÉ“UYY©Y³fiæÌ™µÖ—­ÔÔT½óÎ;µ^ã74fÌy<%$$è©§žRqq±î¹ç­Y³FO<ñ„²³³ÃË1BÏ>û¬Þ}÷]ýð‡?ÔYgÕè¼Æö#r{÷Þ{¯6lØ ŸýìgêÒ¥K£ûr¦õŒ¥òòr>|X·Þz«®¼òJ9íÞ½[o¾ù¦$)##C·Ýv›V­Z¥)S¦¨¢¢B÷Üs$iíÚµ:÷ÜsÕ£GIÒ%—\¢N:éÿøG£Ç9ŸƒøøÄBSÚ>RcÇ·¡ï ¦~]Ý3Ó”’ìRþ¿?®õú;?Д_Ζ×W£»]Ý1F%åzìÿ-Ô?ÿýz`Òê–‘^þÛW^¬^W?ø?Ý<â*uÏìÒè<»ÝÐCwܤƒ…%šñ‡µí“Ýúém7*%ÙUk{¿ø õÞGŸéǹשs§dMŸù‚ª¼ÕšÿÚýõÕÕ­vœÐ|¿Vp饗*##CóæÍÓ¡C‡´hÑ"IÒå—_.Ç#Ó4•••%ŸÏ§_ýêWzã7TUUþ9¡êêÚw“ïÚµ«$©¸¸¸Ám^~ùåêÚµ«žþyíÝ»WK–,QII‰†^æ7ÞÐÎ;5þ|õîÝ»ÑyíGäööìÙ£ hÚ´i*--mt_δž± uÿý÷ë‹/¾Ð“O>©Å‹ëöÛoWJʱŸ}***Rnn®Þzë-ù|>èÜsÏ•$}þùç:pà€¾õ­oI’¾õ­oéÃ?Tiii£Ç9ŸƒøøÄBSÚ>RcÇ·¡ï ¦~]iǾ?JË+\梾½”‘–¢ÅïlÔÁ‚­ÈߦRw¥®ºâ¢ð2«6} Ï¾Ú¯WWm”išÊîšÞ輋Î르”ŽúûÊ*()×òõ[dSPõíub{«7jÿ‘b½¾æ_zjîb¹+ªäñú J^_ªkjZîÀ j8ǯtëÖMv»]ÿûßk½ÞµkW•——ë·¿ý­n»í6Mœ8QÛ·oןÿüg}ñÅ ®¯  @’”žžÞà°Kff¦*++kÍßµk—²²²ÂÏCó¼^¯¼^¯G£óÛŠŠŠ“¶×Ø>D«ž±VTT¤Y³fiîܹÒ©Žo}ßAK–,iÒçÑu° D•}ëŠoèwÿ~ý{Wåè¦aƒuïSsUR^¡$ge¤¥„ÃaïYÚøÁÿ5{»eG+å7úÉ“Ve•·Ö¼Ë.8÷¤íwVwí9x„Ÿºkƒê­Gè/—æ–ºëØ¾}»Ün·n»í6eddèꫯÖÂ… •™™©þýûkéÒ¥ºòÊ+USS£ššÙl6ƒAªOŸ>êÔ©S­õUWWë¯ý«&Nœ¨Ûo¿]W\q…&Nœ¨I“&éwÞQee¥¶oß®ÂÂBÝrË-êÑ£‡n¼ñFeddhÍš5õÖ1òyCóÛÈíõìÙSãÇ׳Ï>«nݺջ/‘ëln=›Û6Ñj{IúÉO~¢;ï¼SéééêÝ»·†®ÂÂB=zT‡#üû¯çwžFUkûöíÓ®]»tûí·ë_ÿú—*++Oyœù4ÿsÐÒÿî[³4¥í›z|újêç°-”S¶}Ÿß¯E+ÿ©›†}Sã¾ÿ-õ?ÿlöMýÞUúÇÖå©öé“/öª¸ì¨n>X]Ó;kÄU9ê’ÚQ?ø¿ZW„Jä~64ï“Ý{UQéÑÍǨKçNxéùúÓŒ»”ž–R{{™iºá;ƒô‹{&(³Kg%•”Õ9=»*9ÙóãW·àdôøµÇ£Ÿýìgš:uªæÍ›§½{÷êÅ_TAA µpáBÝyçêÞ½»>ûì³ð‰ï ,ÐwÜ¡ììl=òÈ#µÖ¹bÅ UTThüøñ=z´Š‹‹µpáB-^¼XÒ±+Õ~þóŸëÞ{ïÕŸÿüg>|X?þ¸öíÛ¾  šû!©Öö õä“Ojß¾}'íËìÙ³Ãël‰z¶–è™gžÑ”)Stã7J’öîÝ«'žxB’´zõj ‡ˆ®uïïP…Ç«Q× Ô÷®ÊQ©»B¯¿ûžVäo•$ùjüúݼ×ôÃÑ×ê©ÿï6—ë/,ÕÁ‚uMïܬmz}5úí_—hÒ®ÕÓüP ‹õÚêÍá¾Ðö~óÓ[UR~TϾ¼\‡ K$I¯½»Y¹ßÿ–ºe¥é÷ó߈ÎA@‹9³k›£·íúnçb˜&èÄí[œÇK’¤dI0`@ÿ3½Ymè¯B·Û­³Ï>;.o~‹3c†öìÙ¾ø"tiÿ™¶½ÍfSff¦|>ŸÊÊÊêß”^´œ–j{Ä¿¦´}ç«—7FÆ™1 ›ÊòÿrRÛ7}†¶nݺSÒ}’*%UIò/>¸ÅK@Ç:CÓÈÈú:a[=~À ƒö‚úñ‚sü,‚¿z4õ„`´-§s‚?ÚÚÞºšÔ¦\ Ð>Ѧõ¢ÇÀ"èñXZðøh_hÑúÑãW3½òñ©)íJÛ·O´½u5­í[¡"hu´ký~u„¾$øŸ@ûÒ”v¥íÛ'ÚÞºšÚöFM!¡±Ù$£¦’Óõ`¨÷¸Ð½Ö‡Ž9¢®]»Ên·ÇºZˆ’@  #GŽ„ß5òË€¶oßh{ëjjÛW~¶N/ø®lRbUUDY°Ú­£Ÿ®¯·í­ŽàWGbb¢ª««õõ×_s…_;b³Ùd·ÛÕ¡C‡—¡íÛ'ÚÞºšÜöG TòÞBÚ¾iJÛ[Á¯ŽÐ…/€ö'ôEÐÚ¾ý¢í­‹¶·®Sµ½Uü"„ºþù ´oõuùÓöÖ@Û[mo] óÖFð«#òÂ_€íÇé^ÕIÛ·´½uÑöÖEØkÁ¯|p¬‹¶·.ÚÞºh{X·s°ˆ¶ü‚u¦­¡Mg¶üÚäAíV›Ê&± ~mê@DIÌ2P[ëñ‹Dp±Ðf3H<¿†j›=Ø ]isY%žƒ_¤ jÄ6}b%h³êË usJÜj Á¯¾ÀW÷1@ki³Ù$Þƒ_}0QÌÖ­°¢ˆ|›ªEêŠëð/Á¯))ô‚uŠ×0ŒÊ¬°8›ÍvT’W'çP69•¸„ñü"Õw>_}ÏC¥8 îå§v@K°Ùl ƒ{%éärªçq!ƒ_HCݧf矔––´Ûí­S+`)v»]ÅÅŇ%}¢Úù¤¡Þ¾¸ |!ñüê¨È+gê¦èÐÁþçîÝ»;†±‹ð¢Én·Ën·þå—_v””¯ú‡w#sJCY&.Ä:)Ùêyl«§Ø#¦vI ­ ’’Ê‹ŠŠÎëÙ³g•ÝnOƒ ãê8€6Ä0 %$$Èáp|þÁ”ûýþÅ’öHª‘T-ɼŽOƒÇÇõ-çb}b\cÁψ˜:t,ð%HJ”ä”ÔA’ëxI–t…Íf»éœsΩìÚµk¦Ãáèešfrëìh/ èôûý{9RøÕW_%ƒÁ%’>”T)És¼TëØÅ> ƒ¡ê Œ¼ U:¹‡0&bü¤“Ã_èyCÁ/AÇ‚_¢N¿PÉ”4DÒù’Òu,Úê¬7öćº§•u,ÐKú¤M:vQ‡§Nñ_®F ¿ÈõÖÝ^LÄCj¨×/2ø…†xt,vÐɽ~¡ÇN† ï±_Wh½‘aXGÝÛ±˜:ÜBA.ì¼:ÑÃW··¯:â=ã¥nŸGÁÏËŸBäÁ2u,¸…)Ô8‘¡02ÔIµ2r™P˜”èÀJê±È n~ }> vÕ:Cú¡sû‚õ¬+.oãoÁ/¨c!,tÀ"Y¨Q ÕNÕ¡Š sÁˆe"/‰ìI¬»~` u;—BÓP  ¼Pø …¾ÐPnd Më®?./òˆ‡à { LCµ»eýª¿§O:‘ØCË„JÝóC€´õÝ.ô8QjT{È7Ôëç(u{øLÛ~LÄCðkHè@Úê<-Ô0¶::³¬ãIDATï©;N9̹} $2¸ÕM å_ij÷öµ‰_ì‰ÇàW·02I‡B[@µC\d8 5˜C'†x›zQ€ö§¡ V_]dð‹ €‘ÓÈ*õ¾¸ €ñüê {6;¡s÷B͈yˆå#+A'zûë¨{~Aë©{^hˆ6”#B™"ò6-‘¡¯nà‹â>®»Í˜‹—àטÐ ]Ô! l¡†©»œ]'.±ëDlè~+hlH¶î­]ê^éyþŸYgY©áßí+ñüêõ‹|.æ ©Ñ‰±ùPð íFž×ù»Ä=Ô"‡k#{õ"’-²7°¡süê®·¾ç1OÁOj8ìE ãš*¡`W÷j_Õ3%ø€È{ðÕFöæÕ |AÕŸEâþ<¿x ~õ©{o¿Ð9~Šx=òÄÌÐpÝ‹9Ú‘êúÌu§uÏë«öâ*äÕ'^P}õ2ê<®ê"oÐÜP7n!u[}=€ ½†.ê¨oýq#žPSÂ_h¹ÈÇu{øºz7ž÷´¬úBYÝÞ»º=z¦N‡u7¶þ˜‹÷ðÓP`«¯/òW9ê¾—[·€ÆÔw•¯Tûö,õõ6 ãR[C§ ‘ËÔ7”KèMÑPø«ï¾6ú¤¶ˆ®­;sù@s5t±FcqÄuà ikÁ¨±úö@´5åŠÝ6ú¤¶’N§Þ õ€¦hhø¶±åÛ”öˆÚÃ>€¶¡Í…½Hí54µ×ý­§M‡¼úX) Yi_Àéiw!€5üÿØz‘mtÝtIEND®B`‚ellie-commons-sequeler-9963fb4/data/assets/screenshots/new-connection-light.png000066400000000000000000001022301512323162700277640ustar00rootroot00000000000000‰PNG  IHDR~³€¦ sBIT|dˆ IDATxœìÝy\Tõþ?ð׬ 0 «€ˆKærÍ%Ѻšàr3Óë’n¹ä’¥vM¯Y^½™ÛU³¬¾f.I.•^æ5µÒ«Ý¤BL\r7ETdge›åÌ‘f†y=y0œõ}#¼üœóù€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÈÖ؈³7ýÁhë[S @Mñ˜ˆˆˆÈ6šT8l*!©©Ù/‡Ž˜êS»#7YG}‚œC†@G @5­ÙˆˆˆìCMƒC@G GÕÕ[›ãq´c'"""ë©M`«nY‡ Ž~ªª³®óˆˆˆˆ*RU«ë<»àÁ¨²+š^›e‰ˆˆˆÊª,¸U4½6ËÚ {D5 rÕ}_Ýt"""r^5 qÕ}_Ýt›³ç T“ðVUàcø#""¢êÔ$¼Uø*üÙsªM«^MÞW5ˆˆˆœSu—qkò¾&ßÛ{ AÕ6Q-§Uµ]"""rn5iѫ鴪¶ksö„jú* |⇾Vµm"""rn4ᡯe—©ìkEÛ©lšÍØcªÉ%݇¿Š¼—Pðà@RÅvk²o"""r|5 _e—1(  @÷`¾ðв5  ~U¨mèáЧjÕªUë#GŽŒ ì'‘HÂŒF£¢aË%""¢¦F$ †äÔÔÔÃO=õÔž›7o^Ei4…?#4üIª_¤QUü*ú*F™Ð÷Úk¯õØ·oßÿ5kÖl_£Ñ(mðj‰ˆˆ¨É1R‘Häëééùø«¯¾Ú'//ïbBBB6€büÑðdRÑ-gvËÞŠ¬®wîí|bÒˆˆˆ®/^Ü,‰Â§L"""rF£ñz›6m^NNN>@?Zý*ký«ê½M=ÜùÁ–ªw¯²ððßÿþwC5‘HqìØ±a`™Aªêhj±‰†­°æì)øÕDÙË»¦ïØÇ¦UQ“ô/”Ï!•¥ìµØÊZùÊöâ£ôE7‘HÔ²qË#"""g"‹#¸¡4{” |g»¾çÏ^‚_M‡Z1¥kàà'E邈ˆˆ¨¡¸¡tØ8SðÊ_ò­Š]AGèùZQïÉC/"""¢†fʦ†2óLYÅn:rTÄ^ZüʪìÑk7£>ÜHDDDÔʶðUv;`Ç—{¥ÅÏôÕty·ìe^¶øQc0eÓP.¦ bj-~Vóð³xks]ˆˆˆ¨¾*ëÍë0YÄÞƒ_EOòx¸™•-~DDDÔ$(»YU›µ;öü*c:ÑR8î1‘c£4{8l{(ººdüðÍ’b”où#"""jh=:¶²ÇÍV¶¾MÙCð«JÙ›+:Y›¸‰ˆˆÈáÔ$Ø<ÜUÅÞBSUÝŸî:]¶ƒQC«(TvõÑ.‡t±·àWÊÆÎ!"""jhÕßg÷-ø•åP'šˆˆˆš ‡Í Žüˆˆˆˆ¨1øÕ¦÷ ‘59tq„G¶UÇáN:‘­öùd1‘È®ÿ¬Ûuq5Ñ‚ÕÑh4‡>{ "‘F£"‘ÈÞ Ãbð#""rF£ƒiiiÈÉÉ^¯·uI¤R)T* ‘Hþƒ‘0©©©ÐjµxôÑG!—Ëm]–­V‹ääd¤¦¦"((b±˜áÏʱsÕ’é¯F£AXXd2™yš½¼d2 Ñh,.I“õ0ø5q¦%ôz=d2™+ªœL&ƒ^¯‡ ìï>DGÇK½v¨¤¤ùùù(**Bqq1ŠŠŠPRRA`0`0‰‰b±...puu…B¡€««+<==áââbã#!""{áh-h¦zy©×ºüì€ÑhDNN233‘›› ‘H •J77WxyyC­ö3‡<‘H‰D0 æu =t:=´Úh4y¸q# F£///¨Õj¨T*þã!"¢ ]ºt psskÔýj4dee!<<¼Q÷ëÌülH«ÕâÖ­[HOO‡J¥‚!‹Í-{‚ @«-±hò6ý­lww±X ±X WWW(•JúC””” ##—/_†¿¿¿ù¾"""[„>ðöönô}:;?0¸qãîÞ½ ÿ€´jÝF£:½Å%„¼ú‹ÅH$ðV© òñA^^~ù%Í›#<<œ-€DD6 }&ÞÞÞv7¬LSÆà×È´Z-Μ9©TŠPÀý{÷ü¾ ‘H¹Lް°0dggãäÉ“èܹ³Ýuå'""¢†Ãà׈ôz=âããáåå www”””4ê¶:"‘Íš5CAANœ8^½z™ï$""¢¦Á¯]¿~r¸(\PXTh³:´:-\.Èðûï¿£mÛ¶6«…ˆˆˆƒ_#ºsçüüüQ\TlµûøêJ0P*Ý‘’’ÂàGDDä$üQqq1ôt:­KÈdRÙº """j$ ~ÈÝÝbì¦÷’‹\nÓž\DDDÔ¸ü‘N§C³fÍPTT­VkÓZ xxx ==ͦuóÉÌÌÄ´iÓУGÌ›7ÏÖå9¿F¤ÕjqãFŸš\M£?>G,Cå]Ú«øÆV»ì|8\n[={öĸqã0eÊlÛ¶ ‡Bzz:üýýÑ¥KLŸ>žžžõ^Ǥºó]‘'N`ÇŽæûôÂÃÃñÌ3Ïà™gžX,ƸqãpíÚ5¥ãWöìÙ0gÎŒ9={öİaÃ*ìÜÑÐ犈ș1ø5"£ÑˆÂÂøøøšÃ[Et:Š‹‹+x•˜ß€B¡xèåbñ}e—rE"är9îÝË·êñ™:ŠÌ›7ãÇǻヒ7šÃiuŒF#6oÞŒ-[¶ <<ƒ ‚\.Gbb"þñàØ±cxçw •JѵkW$&&B„rÛ‡X,Æ•+W——Wî^²„„@ddd•õ‚€;w¢]»vèÛ·oµõbĈÈÍ͵˜¾}ûv¬_¿jµ}úô»»;N:…¥K—âÌ™3˜7o^¹g& ‚€ùóçã÷ßGÏž=ѬY3œ?_ý5âââ°cÇŽr¦¶ëÔæ|—]gË–-زe зo_4kÖ gΜÁ²eËpèÐ!¼÷Þ{˜4iòóó±~ýz4kÖ 111€:Tyë\9+¿FäããƒôŒLähràPeøk(b±r¹ii©Ðê´ð·bOTSðkÙ²%bbbðùçŸãË/¿4ÿѯΰyófŒ?S¦L±tÛ·oÇÇŒ]»v!&&={öÄñãÇqñâÅraâĉˆŠŠÂÑ£Gñ믿"::Úb~BB”J%Ú·o_e=W¯^Ž{÷ЫW¯Õ”¶h•uôèQ|üñÇèÝ»7Þ}÷]Èd2ó¼-[¶`ãÆP©Txå•WÊ­;wÂÕÕÕ<ýßÿþ7Ö¬Yƒ7V¸¯Ú¬S›ómòÝwßaÓ¦M8p Þ~ûm‹PøÍ7ß`Ù²eXµj.\øüóÏ¡V«ñì³ÏV{îó\9+ëvé¤*)•Jü©SG!)) €R©´Q H$‚T*…Ñ( )é: ‹Šð§N‚»»»ÕöQöI“&!$$Ÿ~ú)RRRª]W«ÕbãÆèÑ£¦M›V®o̘1èÕ«6oÞŒÜÜ\skÝÉ“'-–»ÿ>.\¸€'Ÿ|mÛ¶E||¼Å|A˜˜ˆnݺUÛ¹åæÍ›€æÍ›W[EAÀ§Ÿ~Š,[¶Ì"ÈÀĉÑ¿ìÞ½ÙÙÙóòòò°`Á‹ #GŽD»víWnµY§¶ç( ö6l@DD-ZT®óÎàÁƒñ /@,×ú‘„}®ˆˆœƒ_#ÒétðõõE‡ö P(Ÿ€+W.C«ÕB*•@,[5ŠD¥?¤R ´Z®\¹‚„„“P(\Ñ©cG¨Tª{|œ\.Ç‚  Õj±lÙ²joÜýå—_‘‘ñãÇWºÌóÏ?ÂÂB\¸p Á¯¿þj±Ì¯¿þ AÐ¥KtíÚ'Nœ°˜ñâEÜ¿ß|ÏYUòóK/…‡††V»lEœœŒQ£FU2_|ñE—ÏðÑGµû®¬Ž;"==%%%u^§¶ç(mIMKKÃèÑ£+ýœÎœ9o½õV/ï›4ö¹""rV ~È4€³ŸŸíÛw@çÇ:£  ‡Ä¡C‡påÊeÃÕÕ …r¹2™ R©Iù`h v‰R©2™ r¹ …®®®(..Æå+—qèÐ!:t÷Ñù±ÎèØ±#|||¬:€sE:wîŒ#F 11ûöí«rÙäädˆÅâ*{Ã>òÈ#æeÒûûí7‹žÊ'Nœ@PPÔj5{ì1dffš[î€?Z«»¿ø£³®aܴߪBf»víàååeQ#UºŽŒF£9˜ÖeºœoS]»v­tºjìsEDä¬x_#+;€sûGE€233‘––†3gÎ!;ûŒFAAðòò†››ÛƒN®Ë] T*̓=—†A $ ²²î£°°¹¹ܽ› ‘H ¡}ûŽP«Õ >€óæOŸŽ¸¸8|ôÑGxâ‰'*¿íöíÛ¡F(nݺèÑ£víÚ…3gΘƒ\||<üq¥ÁS*•">>-Z´PüÂÃÃkô” S§Û·o×ix–””ˆÅbøûûW¹\`` îܹc1­ª³Ê‚hmÖ©Ëù¾}û¶y pkkìsEDä¬ül ºœóòò‘…ìœܺ}÷ïßGQa! ‚½N½^ ôiR™ ±®nnP*•pww‡‡‡'zD¶@³fž:€sEÜÜÜ0þ|Ìž=+V¬Àš5k*]V*•bþüùÕþ±6µðtéÒr¹§NBdd$nß¾´´4s«‘››:uê„„„¼ð (..Æùóç1räÈÕ 4ðÔŽ{÷ —Ë«ÈÚÝÝuÚG}Ôö|›†jˆ0eï犈¨©`ðkDM}çÊôèÑÏ<ó 8€#GŽ _¿~åÂCpp0ôz=zöì •JU£í* tîܧNPÚš'‘Hн{wó2={öÄgŸ}ƒÁ€ .@§ÓÕè2/Púh1wwwœ8q¢ÆƒQ¯Y³¹¹¹X²d ‚ƒƒQ\\Œüüü*‡IKK«ó}„uU—ó N‡¬¬,«?yÞÏQSÂ{ü‘F£Á`(wiÊ4€snnRSS‘™™…’’b(\\àíÕ Ah†VˆhÙmZ·B›Ö­Ѳ%"Z¶D‹°0øÃÛ»\ Øœ™™…ÔÔTäææ¡   ÒœsrråØgΜ |ðÁ((((wL=gK{;×\dd$®\¹‚ÂÂBüúë¯èÔ©“EOåÈÈHââÅ‹8sæ \\\йsçm["‘ &&¿ýöŽ?^íò©©©Ø³g<<<!!!€ëׯWºNaa!ÒÓÓÍË6–ºœoS è™3g¬^=Ÿ+"¢¦„Á¯™p–ËåÕà|ïÞ}dddàÖ­Û¸rå*Ξ=‹'püx¾ÿþ0¾ÿþ0ŽÉ 8{ö®^½†[·n###÷ï߯²Ó†i碢¢†8Ì yzzbîܹÈÊÊÂ矋ù]»v…››öìÙSé6RSSñûï¿[L‹ŒŒ„ ¸páÎ;W®s@«V­àë닳gÏâüùóæËÃ5___|øá‡U†dN‡%K–@,cÈ!€Ç{ 2™ {÷î­t½ýû÷C§Ó¡[·n5®Éêr¾###¡V«±cÇŽJ×ùøãñ÷¿ÿZméó¦E"QZ•íù\9Fc³}Xï RT=¿Fäãロ9šÈd2›à¬Ñä@«ÓÖø2Ÿ5ôéÓQQQøòË/Ë…(ooo<÷Üsøá‡ʽ”^&ÿ׿þ…ñãÇ#--Í<=<<jµßÿ=²³³+ì‰sçÎáÂ… 5¾Ìk¢P(0kÖ,ܹsãÇGbbb¹e’““1gΜ>}3gÎ4÷†õ÷÷ÇСCqôèÑrã ¥ÁjÇŽèСž|òÉZÕU_u9ßr¹S¦LÁ•+W°bÅŠr­ÈGŽÁÎ;!—ËÍá: )))Õ†?{>WDÎ 33Ó&ᯠ  ÖWz¨~x_#R*•Àé3g‘””„V­"}ç’’b$%]‡"<Ö¹³ÕÛV9sæàÔ©S¸xñ"|||,æÅÄÄàçŸÆo¼I“&¡wïÞ Âõë×±yófÄÇÇc̘1°X¯gÏžøöÛo¡V«ÑªU«rûìÕ«-ZNW£ñûÖ¯_?èõz¬Zµ 3fÌ@@@}ôQ¸¹¹!99/^„L&Ã+¯¼‚Q£FY¬;aÂÄÇÇã7ÞÀôéÓÑ«W/¸¹¹!11}ôŠŠŠ0{öìZ×d u9߃ ÂÝ»w±uëVœ={?þ8<==qöìYœøÀ<¯E‹øøãmvÏZ]ηX,Æ”)SбcGìØ±„H$B‹-0oÞ< 2Ä¢·øÐ¡C‘ÿüç?øá‡0nܸJƒŸ=Ÿ+"¢¦Â¹UðÞôUüཀ¥AUöà% ÐE«ÕîlœRëçÀpuuCXXòóï!=#7“’––ooo<òH[B¡P ¨¨………(***ó*6¿WW×/\]Ý|u…›››yçÔ´T\¹|M.Þ²%üýáî7o¢¤¤Ï<óŒÏLy)))8þ<ŠŠŠŒCØÞª—³…k×®áÒ¥KÐëõhÑ¢:wî\ë'\4{;ßö|®ˆQéˆôz=.]º„öíÛ—{4¢½Ðét¸páÚµk©TjõF‘úËå1ÐÐ=x錾âÁû²_~ßèìáL:Uð3„-EáP*=cÀùîÝ»ÈÎήpg±X A`0*ÀYt(..©tçÀÀ@‹œoÜH2àlÁˆˆ¬Ç4|—^¯Ç­[· ‰Z«ÎnA«ÕšŸj¾ŠÁÏzx©×œig""²=S{±X •J…ÌÌL\¸p¡\'-[‹Åpuu…Z­6·òÛKèk*ü‰©™½,[à ü1¨4ÿa5m¦–3ˆD"›¯ 5Æ`þÕÕ”^ÉR(P*•vÕÒ×”0ø5£ÑƒÁ¹\N_î˜igƒA­Vûࢠ(\䉼`ºúmzl–i»¦ÿ•n³t»ÅÅÅ())yKt®hg‘¨´G•Á`€D"á?0"¢&ÌÔá<<<àîînóÀ÷0Se¿’u1ø5A pçÎ à\\\\Á«Äü(cÎòåbñ}e—rM8¥=]Ma’—~‰ˆš6S 25Øcð3}eèk ~ÀtSmxx8îÞ½ £Q€\®°éÎEE…HÄhÑ¢E£=³—ˆˆlϪìõ6{¬©)áøÀô!–J¥èÞ½;d2îß¿‰DÒè8‹Å"Ü»—9ºwï©TjQ#9S´·5,¿FPö^…BîÝ»ÃßßÉÉ7‘‘‘ö`XIƒà,ÒÓÓpûö- {÷îP(¼‚ˆˆÈ‰ðRo#0ÝGaº‡Îh4â‘GAXXΟ?_M€»»;Z´hoo\]]ÀÓû‡ï÷+úì¼ADDD ~vÂ4€rÙ˯¦€WQø{xݲ- yDDDT?;Æ GDDDÖÄ›½ˆˆˆˆœƒ‘“`ð#"""r ~DDDDN‚ÁˆˆˆÈI0ø9 ?""""'ÁàGDDDä$üˆˆˆˆœƒ‘“`ð#"""r ~DDDDN‚ÁˆˆˆÈI0ø9 ?""""'ÁàGDDDä$üˆˆˆˆœƒ‘“`ð#"""r ~DDDDN‚ÁˆˆˆÈI0ø9 ?""""'ÁàGDDDä$üˆˆˆˆœƒ‘“`ð#"""rR[@Dd F£ÑÖ%8,‘Hd눨ŽüˆÈ©Fó‹jO$Áh4B$19 ?"d4‘œœŒŒŒ hµZ[—ã0LO©TÚº‡%•J¡R©‰DÂðGä`üˆPrr2²³³áíí ‰Dbër† ÷ïßG·nÝl]ŽCÒjµHNNFjj*‚‚‚ ‹þˆƒ‘ÊÈÈ€¯¯/T*¤Rþ3® £ÑApïÞ=Ü¿Ÿ—zëH&“!,, /^D`` ù²/9öê%r@Z­nnn }uÀÀW2™ z½‚ à9%r$ ~DŠ­,dkì$Cäxüˆˆˆˆœƒ‘“`ð#"»£Õj±oß>Ûº"¢&…Á¨ ‹‹‹ÃÌ™31dÈL˜0_}õ•ù†|{³uëV\»v žžŽíÛ·ãîÝ»6«'55óçÏÇ€ðôÓOãŸÿü'rssk4҉ IDAT¿¨¨‘‘‘øé§Ÿ,¶yàÀôîݻܾ¶nÝŠÈÈÈ _o£¡¥¤¤ 22·nÝjÔýQã`—@¢&ê»ï¾Ã{gçž{cÇŽÅåË—±cÇäää`úôé¶.¯œ}ûö!$$­[·FHHvïÞmÓzæÌ™wwwüãÿ€V«Åúõëñî»ïbõêÕ5š_Æ CTT`ñâÅÆË/¿ P«ÕÖ;("rzlñ#j‚t:6mÚ„1cÆ`òäÉèÞ½;ÆŽ‹ &àÈ‘#(**ܺu sçÎÅ!C0uêTœlnûïÿ‹_| ÀÖ­[ Êy@é91c¢¢¢0vìXœ>}ºÎ狈ƒQtëÖ-äææ¢ÿþÓ‡ †={öÀÕÕZ­ ,€¯¯/>úè#ôïß .DJJŠyùo¿ý3gÎDÿþý±uëVs«lž^¯Ç›o¾‰æÍ›cÆ xâ‰'°hÑ"äææZìïÃ?DŸ>}°|ùräää`óæÍpwwÇìÙ³ñÆoXÔ\ß:ëÂËË Ø¸q#âãã¡×ëѦM<÷Üs5šo’••…””óK£ÑÔ«®Ê|óÍ7˜7ož~úilذÁ"$V4O¯×cÖ¬Y ÅöíÛñÔSOaÞ¼y VÙ?¢&(##àëë[é2gÏžEzz:^zé%„††bäÈ‘P©T8|ø°y™áÇ£S§N˜0a$ ’’’ªœwöìYdggcâĉ Ä /¼‘H„3gΘ÷7~üx„……aܸqXµj¼¼¼àææ‘H…B«ÖYb±6l@›6m0wî\ 4ëׯG^^^æ›,_¾#FŒ0¿>úè£zÕU™çŸ=ö¦M›‰D‚ëׯW9ïÔ©SÈÊÊÂôéÓ„qãÆA$á×_múˆÈ~ð?¢&ÈÏÏ ÿ —ÉÈÈ€»»»ÅüÖ­[›C#   C•óÒÒÒ ×ëñüóÏW¸/wwwózQí±Ô·ÎÊT7ð°Z­Æßÿþw¼úê«8~ü8¶lÙ‚_ý›6mªv¾iÛ«W¯ÆOû  €««+:wî µZmÛ¶!%%{÷îEVVúõëWçývî܈Eff&~üñGŒ=åö÷å—_bæÌ™HKKPð®]»†üüürÛ´vÕ1X»v->úè#dff")) €Z­†§§gµó­I­VÃÃÃÛ·oÇo¿ý†õë××ûÍ]ºt§§'6n܈ŒŒ =zýë_‘žžn¥ª‰È^1ø5Qƒ Â[o½…S§NáŸÿü'Ž=Š1cÆ`Ê”)¹\ŽåË—#55Ó§OÇ¡C‡°xñb„„„ÔyŸ®®®X¾|9nÞ¼‰É“'c×®]7nüüü,ö7mÚ4|÷Ýwxûí·Ñ¼ysÀرcqâÄ ¬ZµÊb› QguBBBðöÛoãðáÃ2dbbbpóæM,_¾¼Fó­I,cÁ‚¸rå Þzë-<úè£hÖ¬Y½¶éææ†÷ß7nÜ@LL vìØ—_~¹ÒÛˆ¨é°‡§¼‹*xoú*~ð^ @‚ÒKÓ²/9€.Z­¶þã79¸¸8´nÝîîî¶.ÅaF‚€üü|dff¢K—.Õ®#233!“É R©j=¿)KLLDûöí!•J!‹!Ùߢ†%—Ëc$(  {ðÒ0|Ń÷e¿>ü¾Ññ?"¢JˆÅâ*[Áª›ODdox©—ˆˆˆÈI0ø9 ?""""'ÁàGä€är9ôz}*&²6N±˜>ˆ;w9 dff@½Çts¦^½&ì…Z7Z­ÉÉÉP*•‰Düýý!•òŸQméõzäää‚‚‚l\MÓÄ¿NDV’ÀÀ@¨Õj?"¢:Ðëõ‹ÅHMMeðk ¼ÇÈJt:”J%CQI¥R(•JÞ.Ó€üˆ¬ˆ÷¤Õ6,?""""'ÁàGDDDä$ü¨BZ­ßÿ=A°u)äd´Z-¾ýö[~öˆˆƒ_‹‹‹ÃË/¿Œèèh<ÿüóøê«¯`4m]V…6oÞ FÈÈÈÀgŸ}†û÷ï[mûÑÑÑxûí·-¦¥¤¤àÉ'Ÿ´Ú>ìQïÞ½ñæ›oZL»sçzôèÑ û=~ü8&L˜€Þ½{cĈøâ‹/ìö³·qãFóg/==›7o¶êgˆˆJ1ø5 #GŽ`ùòå=z4víÚ…W^yû÷ïÇæÍ›m]Z…öîÝ‹{÷îš7oŽ/¾øžžžVÝÇÙ³goÕm:‚Ó§Oã—_~i´ý}ÿý÷X²d ÆŽ‹½{÷âÕW_ž}û°qãÆF«¡6þýï#??‚Ý»w[ý³GDD ~ F¬[·o½õžzê)øøø OŸ>X²d ~üñG ÀíÛ·ñÚk¯aÀ€˜0aNŸ> ÈËËÀðí·ßbذa2dŽ=Zí< ´íµ×^ÃÀ1qâD\¸pÁ<Ï´¿bÖ¬Yøí·ßãLJF£ÁÔ©S±sçNäåå¡OŸ>åÖ«M;v,V¯^ ­V[áüo¾ùãÇGtt4^yådee™÷Ó¿8pÏ>û,fΜ Fƒ7ß| Àßþö7Õèüþûï(..®ÁOÑz^zé%¬\¹²Òã¾sç¦OŸŽ¨¨(Œ7çÏŸlÛ¶ .4/7qâD,]ºÔüýðáÃqòäI‹m ‚€÷ß‹-BTT|||зo_,[¶ ?üðƒù³wëÖ-LŸ>}ûöÅØ±c‘˜˜ ô\÷íÛijÏ>‹AƒáÈ‘#ÕΫê8Êî/** 3fÌÀ¹sç£G†F£Á¤I“°}ûväåå¡W¯^åÖ«MDDT1¿r÷î]Zü€ððp|þùçH$0 ˜3gz÷î`Ê”)˜?>²³³………¸víbcc1nÜ8,[¶ z½¾Êy‚ `Μ98p :„Ñ£Gcþüù(,,´Øßþýû1|øpüãÿ@QQbccáíí 6 &&Æ¢æúÔù°=z 00±±±åæi4ìÞ½sæÌÁÁƒ† 6˜ç!33;v쀗—Ƈ!C†àË/¿DFF8UžA0uêTÈÊÊBçÎ-¶—’’‚‚‚<ñÄÓ[¶l‰;wš?{³gÏÆSO=…ï¿ÿÓ§OÇo¼añ3½zõ*vìØ—^z K–,±øìU4¯ªã(»¿o¿ý#GŽÄ[o½…¢¢"ìØ±ÞÞÞØ¼y3ÆŒcQs}ê$"¢òüHZZüüüª\æÜ¹sÈËËÈ# “ÉгgODDDàØ±cJÁèÑ£áéé‰aÆ233«œwþüy  <b±ÑÑÑpuuÅ¥K—,ö'—ËѧOìØ±®®® VçÃL¡ìË/¿Ä­[·,æy{{#66:uBAAT*®_¿nžo41jÔ(xzzbàÀhÖ¬zöì •J…>}úàöíÛPå9‹ÅˆÅàÁƒ«uQy|Ä@ñ÷÷7_¦¬Lff&Ú¶m ±øüýÈ# ==@éêU*@"‘ÀÍÍÍ<šyeóÒÒÒ‘‘!C†XìK£Ñ@„rûsss«öXêSgEZ´hQ£FaÕªU˜?¾yº^¯ÇúõëñÓO?ÁÍÍ ^^^­7R©Ô\¯D"± 2™ÌÜ ´ªs”Þ¿h áááxá…°bÅ ¼õÖ[æé©©©HOOÇ Aƒ,–7=¯²W¯^8yò$ÒÒÒÐ¥K( $&&âÔ©SåZ”ÒÏ^eÁÛ$##<òˆÅÏ´]»vHKKPþgêîî^égÏ4¯ªã¡ÜþjòÙ«ODDTƒ_ †‹‹ âããiž~óæM,^¼›7o†Z­Æµk×`4Í#•_½zÕâÞºÚòññA«V­*ì@rúôérûÓh4ðöö®r› Qç„ ƒÿýïæiGŽÁ/¿ü‚-[¶ÀÍÍ ÿûßÿêÔ¦ªs`k“'OƨQ£ðÃ?˜§ùúú¢uëÖ^þJƒßwß}‡ììl¼ð P*•øùçŸqæÌLž<¹ÜòÍ›7‡‹‹ ~ùåôìÙÓ<=)) .Dll,üüüpõêU‹Ÿé•+Wзoß:[UÇ‘˜˜Xn5ùì5DDDÎŒ—zˆX,Æ«¯¾Šwß}?þø#rrr‡… âÉ'Ÿ„D"AÇŽ¡T*±oß>‚€“'OâÚµkõú£Ö±cGäææšÇA»|ù2Ƈüü|‹ýéõzÄÅÅaüøñæa3|}}Í-)oÓÚuÊårÌ;;wî4OÓëõJ¥صkW¶]Õ9J{¦¤¤Ô¹öúËå˜?>¶mÛfžÖ©S'äææâàÁƒ—.]BLLŒ¹ÞÇ.\@qq1üüüЭ[7$$$@,Wøs±XŒY³fañâÅøá‡““ƒü ,ÀŸÿügH$têÔ Ø»w/A@BB®^½Šèèè:[UÇQvz½ÇÇèѣ͟=µZ]ág¯!ê$"rflñk@„››¶nÝŠ¤¤$øúúâ¯ý+^|ñE¥—.W¯^•+WbýúõÀòåËáë닼¼¼:íS.—ã½÷ÞÃêÕ«ñþûï#44&L0QvmÛ¶Å’%K T*”ö<]½z5¢¢¢Ì56T@iGÇ{Ì|¯à€€áÇ#$$O=õ>lÕs víÚ///×¹öúˆŒŒD×®]Í÷©Éår|ðÁX¹r%Ö¬Yƒ°°0Lš4Éü3swwG`` Ú´i ô©ÚµkWé>ž~úi¸¹¹aË–-¸qãÔj5†ŽÑ£G(ý™®]»Ë–-ÃG}„ÀÀ@¬ZµªÞŸ½ªŽ£ìþyä,[¶ÌüÙ›8q"V®\‰èèh‹ Q'‘3³‡'!‹*xoú*~ð^ @‚Ò *{ð’Pè¢Õjw‚ÈÆѾ}{s˜!"¢Ú»ÿ>.\¸€.]ºØº”räry €DÅ´t^zワxð¾ìׇß7:^ê%"""r ~DDDDN‚ÁˆˆˆÈI0ø9 ?""""'ÁàGd%2™ Z­ƒÁÖ¥9$ƒÁ­V[îQ”d=ÇÈJ|||̃ËårWCDäx´Z-RSSáããcëRš,?"+ ÂÝ»wqóæM>/–ˆ¨d2|||*|*Yƒ‘Ûì‰ DDM…ÑhÓ1Ž›4?"+â/+""²gìÜADDDä$üˆˆˆˆœƒ‘“`ð#"""r ~DDDDN‚ÁˆˆˆÈI0ø9 ?""""'Áœ‰¬Œƒ8ÕH$²u Mƒ‘•Fsècø#"ª=‘H£Ñ‘HÄØ@üˆ¬Àh4Â`0 -- 999Ðëõ¶.‰ˆÈáH¥R¨T*@"‘0ü5?¢z2©©©ÐjµxôÑG!—Ëm]‘ÃÑjµHNNFjj*‚‚‚ ‹þ¬ŒÁ¨žL—x5 }ôQÈd2^ê%"ª™L†°°0\¼xæË¾d=ìÕKT¦€'ôz=d2™+""rl2™ z½‚ à=ÓÖÆàGTOe;u‘uðwkÃ`ð#"""r ~DDDDN‚ÁˆˆˆÈI0ø9 ?""""'Áqüì\tt4Š‹‹¾¾¾èСfΜ ÿ­¿yóf >ÞÞÞU.———‡!C†àÿû_½k®]»vaݺuJ‡D)û˜žmÛ¶!<<¼QëiHQQQƶmÛ,¦aРAˆˆˆÀ¦M›ªÝNjj*>øàœ:u 2™ O>ù$fÍšwwwó2?ýô¶nÝŠëׯ#88Æ ÃðáÃ-jÙºu+BCC­w€DDd÷Øâç¾øâ üôÓOØ´iÂÃÃñÒK/!''§FëîÝ»÷îÝkà ënÔ¨Qˆ‹‹C\\þüç?ãõ×_7ß”BŸIvv6®^½j1íèÑ£puu­ñ6,X€-Z`çÎØ°aRSS±víZóüÇcéÒ¥ˆ‰‰Áž={ð·¿ý »víªQ¨$"¢¦-~D­VcòäÉÈÈÈ@ll,^ýuÀ7ß|ƒÝ»wãÎ;hÛ¶-ÞyçøúúbüøñÐh4˜:u*ÆŽ‹˜˜˜J—5Ù¿?>ùäÈd2Œ3#GެrpèÐ!lܸƒÝ»wÇßÿþwÈd2¤¤¤`ÅŠ¸zõ*‚ƒƒ1gδoß¾ÆÇ»aÃddd`áÂ…JÇt:t(þùÏ¢eË–xî¹çðÚk¯UXoUûþý÷ßѼys(ŠúÿPj©W¯^Ø¿?æÌ™cžvàÀôêÕ 7oÞ|òÉ'ÈÌ̬ð¸Û·oK—.áƒ>€§§'`ñâŸví€ÒVÓ?üo¿ý6zõêðööƪU«0~üx >*•ª˜ˆœÉ±cÇpâĉj—ëÑ£úöíÛÑÃØâ瀢££qþüy€F£ÁîÝ»1gÎV¬X•+Wb÷îÝP*•HHH€ ˜3gˆC‡aôèј?> k|œýúõC\\ àüùó0øÓŸþ(((¨°Þªö-¦NŠƒZågQ[ýúõÃ÷ßN ô²íµk×УGó2ýû÷ÇñãÇ+“DDDàÒ¥Kt¤D䌎=Н¿þºÚ×Ñ£Gm]ªÓbðs@jµJ[sbccÑ©S'@¥Ráúõë®WݲF£/¿ü2 """лwo>|¸Êõ \\\ÌßÏž=O<ñΟ?ƒÁ€ÁƒC,#::®®®µ ðññAbb"à‡~@¿~ý —~lA¨°Þªö-‹‹Áƒ×þÄ[AË–-€ãÇ<ˆèèh¸¸¸˜—yø¸;†èèhóq¿ÿþûèÛ·/V®\‰Aƒá“O>1_ÎOKKƒŸŸ_…ûöóó3nˆˆ¼yóЦM›*—‰ˆˆÀo¼ÑHÑÃx©×eee™ÿ¸ëõz¬_¿?ýôÜÜÜàåå½^_ázÕ-+‹-.û¶iÓ?ÿüs•ëÉår,_¾7nÄÊ•+1`ÀL:iiiÈÈÈÀ!C,jÐh4µ:Öèèh;v Ý»wDZcǰdÉ’jë­nßÍ›7¯U µQ“Ç <ß|ó úöí‹àwÞ1ß³iZ?::GE·nÝÌÇmš'‘H0tèP :IIIظq#-Z„5kÖÀÏÏYYYÖq÷î]›çñqHDdmJ¥k׮Ō3Ì·¯”b¾U…¿lƒ-~èÈ‘#èСƒùý/¿ü‚-[¶`Ë–-:th•ëUµ¬ ÈÌÌ4åʨÕêj×ëÚµ+>ùä|ýõ×Ðh4ضm|||ЪU+üç?ÿ±xõëׯVÇjºìiº‡­ì=‚•Õk­}7”àÌ™38yò$äry…÷=VvÜéééøæ›oÌË…‡‡ã•W^ÁéÓ§ÁÁÁpqqA||<€Ò{6W®\‰Û·oãæÍ›hݺuC99•J…uëÖ!00Ðbº¿¿?Ö­[UFƒŸCIOOÇÆ‡ñãÇ(mÅ“J¥صk—Å:¾¾¾HKK«Ñ²"‘Ÿ~ú)´Z-’’’püøqôïß¿ÊõRSSñ / 33r¹®®®(..FÇŽ‘››‹o¿ý‚ àòåË7nòóókuÌ¡¡¡ðööÆ_|þýû—«wÓ¦Måê­nßÿþ÷¿‘’’R«:¬ÉÓÓ½zõÂ{ggžy¦Âe*;n¼ÿþûøÿïÿ!77IIIØ´i:wî  ´ôÕW_ŻヒüO<ñÎ;‡iÓ¦aâĉðòòj”c$"ç¦V«ñᇚ¯Ê¨Õjüßÿýl\ñR¯xñÅ!‰àçç‡: 66ÖÜ3sÀ€HHHÀðá§žz ‡6¯ûÒK/aõêÕˆŠŠÂĉ«\V©T¢C‡6l¤R)&L˜€Ç{ íÛ·¯t½ÀÀ@ 6 ³fÍBvv6:uê„Ù³gC.—ã½÷ÞÃêÕ«ñþûï#44&L0÷D­~ýúaÆ غu«Åt™L†?ýéO>|8$‰¹^•î[ìÚµ ^^^®u-Öòì³Ïâõ×_ÇÓO?]é2·——Ö®]‹?þü1 üq¼ýöÛæewwwlݺIII€Á`°è@üñ¹2Ù´iyäë$9µàà`¬[·Ÿ}ö&OžŒ   [—DDÕ/ÒàD¼7}?x/ AiP•=xÉ(tÑjµ;§T²…øøx¬]»_}õ•yš­œ~˜Ñh„ Ðëõ¸páºtébµmWtÜuuòäIüüóϘ5k–*#"jX‰‰‰hß¾=¤R)Äb±ÅRmI.—ÇHP @ @÷à¥` 0>øŠïË~}ø}£c‹ÙµÜÜ\ìÛ·Æ ³u)ÊÚÇݽ{wtïÞÝ*Û"""ÇÅ{üÈnÝ»wcÇŽ…››Fe1ÏÍÍ K—.µQe «ªã&""ª¶ø‘ÝòððÀþýû+œgzFmSTÕqÕ[üˆˆˆˆœƒ‘“`ð#"""r ~DV"‹¡Óél]‘CÓétæg““õ±sQ=‰D"ˆD"(•Jܺu ¡¡¡Ëå¶.‹ˆÈáhµZ$''C©Tš·’u1øÕƒH$‚Ñh„X,†J¥Bff&.\¸Aª_™ˆˆ,ˆÅb¸ººB­V›[ýþ¬‹Á¨žLÿ+õðð€H$Bqq1 €Ò'{QÕLáN"‘@¡P°Å¯1øÕ“H$2ÿÏÔÃÃîîî |DDu`ú}Zö+Yƒ‘˜~I™.û2øÕž)è±µ¯á0øY‰é•Ñhä/,"¢:âïφÅàGdeü¥EDD*œ^á IDATöŠå9 ?""""'ÁàGDDDä$üˆˆˆˆœƒ‘“`ð#"""r ~DDDDN‚ãøY‰ÑhDjj*²³³¡Óél]‘ÑÉdðññA`` ÇDm ~DV’ššŠüü|øûûC*å?-"¢ÚÒëõÈÉÉÙ¸š¦‰ˆ¬$;;P«Õ ~DDu ×ë!‹‘ššÊà×@x‘•èt:(•J†>"¢:’J¥P*•¼]¦1øYïI!"ªþmX ~DDDDN‚ÁˆˆˆÈI0ø9 Þ…Nv#::Ÿ}öBCCÍÓNŸ>eË–a÷îÝuÞîæÍ›1|øpx{{[£ÌZ;þ<¶lÙ•J…·ß~••…;vàÆP©T9r$Ú·o£G–;VA°`Á„……(íDòÅ_àܹsðððÀСCѹsçrû­ÉrÕFDDMƒ5y{÷îEÿþýmü±gÏôïß§N2Oß´iZµj…É“'ãòåËØ°a–.]Ѝ¨(DEE™—»{÷.V¯^ 󴯾ú %%%xçwššŠ?þ~~~å†>¨n¹Êj#"¢¦‹—zɡܾ}¯½ö € &àôéÓæy‡ÂðáÃ1tèP¼ûî»Ðét?~<4 ¦NŠ;w~ÿýw7J½^^^X°`E+¦ ð÷÷Ç Aƒàî]»ÂÛÛ©©©åÖ?pࢢ¢ P(ÅÅÅHHHÀsÏ=777DDDàÉ'ŸD\\œÅz5Y®¢Úˆˆ¨icð#‡a00gÎôîÝÀ”)S0þ|dgg#??+V¬ÀÊ•+±{÷n(•J$$$ 66ÿŸ½;ª¾÷?þžÉÌda’ !$@ÐÊ…‚ *"´ ÑÄAðJY,­¢öR¨Ôþ¨Ö꽋x±¥·UD…Š `À­Êⵕj¥XP¢TÜ‚l“B’É,¿?ÈŒ“„“ÌdÎëùxÌcΜ3sÎçœï0yó=[JJŠ–-[¦)S¦ÈëõjÖ¬YÚ°aC»Ôüï|G:uj0Îl6kÆŒJHH$=zTeee]¹~EEEúì³Ïô–””(11QÉÉÉq½{÷ÖáÇ|¶5ïkª6@tcW/"ÊäÉ“\ÃÉçóvMîܹSºùæ›e6›5lØ0õîÝ[›7oÖØ±c«={ö¨W¯^š;wn“ó7›ÍZ¹r¥ºvíÚ.ës:n·[O=õ”®»î:ÅÆÆ6˜¶aÃ92%騱c ^KRBB‚Ž;Ö`\kß0züQV¯^­÷ß?ðøãÿ˜V\\¬ /¼Pfó·_Û~ýú©¨¨H6›M .Ôk¯½¦ÜÜ\-\¸0p¿ÇÆzôè!›ÍÖæër:>ŸOÏ>û¬RRRtÝu×5˜VRR¢?þXÙÙÙ ÆÛívUWW7wâÄ %&&žÕûÆBðC‡‘––¦‚‚ù|¾À¸¯¾ú*Ð{7dÈ=ùä“zíµ×T^^®çŸ>\¥¶ÊÚµkuìØ1͘1ã”+ÕoذA#FŒ8%¨uéÒEGUeee`ÜÞ½{Õ­[·³zÀX~è0(»Ý®×_]^¯WÛ·oWAA®ºê*9NMš4IÅÅŲÙlŠœÀÑ¥Kæ³nÝ::t(\«!IÚ´i“ t×]wroß²²2}ôÑGÊÉÉ ŒÛ¼y³Š‹‹¯K/½Tyyyª®®Ö×_­÷Þ{O#FŒ8«÷Œ…cüÐaX,-^¼X‹-ÒÒ¥KÕ­[7-\¸P]ºt‘$?^sæÌQii© 8Îï¶ÛnÓâÅ‹5zôhÝqÇÊËËSrr²ºwï–õ¨¬¬Ô«¯¾*³Ù¬ŸÿüçñãÇWvv¶Þzë-]qÅêܹ³¤“»„7oÞ¬ÄÄD¥¥¥iÊ”)zñÅuÿý÷+))I·Þz«zôèqÖïG$Ü ÙÔİÿÙ\?l–£“AÕZÿ°IŠ“4Øår­jŸRæíرC Ýnw)Ða?~\»víÒàÁƒÃ]Ê)l6ÛI;$ÕHrIª«¸%y$y%ùêŸU?üÜx¸Ý±«À ~Að0‚€Aü ‚à„ˆÕj•Ëå’Çã w)Ð!y<¹\.Y­Öp—µ¸Ž"‡#p¡èH¸%t4.—KN§S‡#Ü¥D-‚"™™™:|ø°öíÛ§ºººp—ŽÕj•ÃáPfff¸K‰Z? „ºwï¶;‚@´¾';B‹à„?V€HÆÉAð0‚€Aü ‚à`?ƒ øÁÀ ~Að0nÙ„ˆÏç“ÓéTii©êêêÂ]t8V«U‡C2™Lá.'*ü€q:ª¬¬Tzzº,þiÀ™r»Ý*++“$eff†¹šèÄ_' DJKK•‘‘¡´´4‚œ·Û-³Ù,§ÓIðk#ã„H]]ìv;¡Î’Åb‘Ýnçp™6DðBˆcRàÜð;Ú¶~Að0‚€Aü"Dvv¶†®áÇkܸqºÿþûUTTÔêÏ/_¾\ååå§}_EE…FŽy.¥žµììlýêW¿j0îСC1bDXêÀh~dõêÕÚ²e‹žyæþùºí¶Û×3:W_}UÇŽkã ÏÝ'Ÿ|¢>ø Üe`H¿”––¦ÿøÇúÞ÷¾§•+WÆ¿ù曚>}º²³³u÷Ýw«¤¤D’4}út•——kÖ¬YZµjU‹ïõ{ã7tà 7覛nÒºuëN» IÚ¸q£&L˜ qãÆiÁ‚Óí:¤Ù³g+77W3gÎÔ®]»š]·þð‡Z¼x±\.W“Ó›[~EE…®¹æ­_¿^7Þx£~úÓŸª¼¼\¿üå/•““£{î¹GÕÕÕù´TÓîÝ»USSÓr#…~,;;[Ÿ~ú©$©¼¼\k×®Õ¼yó´aÃõêÕKË–-“$­\¹R)))Z¶l™¦L™Òâ{¥“×›û׿þ¥—_~Y=ö˜þô§?)??¿ÅÏUVVê‘GÑ¢E‹´víZÙívmÛ¶M^¯WóæÍSnn®6nܨ©S§jþüù:qâD“ë4tèPedd4´~§«»ººZÅÅÅzñÅ•œœ¬iÓ¦iìØ±Z³fŽ9¢õë×KR‹5y½^Íš5K6lM#Ðü"XZZšŽ9"IJIIÑÊ•+5hÐ UUU)55U{öìiòs§{¯ÏçÓí·ß®¸¸8õîÝ[ßÿþ÷õöÛo·ø¹¸¸8ÅÆÆ^Ï;WÇ×§Ÿ~*Ç£1cÆÈl6+;;[ñññúüóÏ›¬ÍÊÖ¬Y£ýû÷ŸqÝ'NTRR’rssÕ¹sg 6L©©©9r¤8 I-Öd6›µråJ3æ,[€Ž‹[ D°’’uíÚUÒÉÛØ,]ºT[¶lQBB‚’““åv»›üÜéÞk6›Õ¥K—Àë .¸@ÿøÇ?ZüœÍfÓÂ… õôÓOkÑ¢EÊÉÉѬY³TXX¨#GŽhìØ± jhéD“óÎ;O'NÔÿüÏÿhþüù­®Ûb±(!!A’£øøøÀ4«Õ*¯×+I§­©GÍÖ@4#øE°¿üå/úîw¿Þºu«V¬X¡„„½ûî»Z¾|y³Ÿké½^¯WÅÅÅPùå—_*--í´Ÿ2dˆ† ¢ŠŠ =üðÃzþùç5bÄõéÓ§ÙZš3cÆ M™2Eï¾ûn«ën-‡ÃqV5íØÕŠŠŠôôÓOëý÷ß×ôéÓ%ì ³X,òz½ªªªR^^^ƒÏtéÒE………­z¯ÉdÒSO=%—Ë¥½{÷êïÿ»®¹æš?çt:5iÒ$Ëf³)>>^5558p Ž=ªM›6Éëõê‹/¾Ð´iÓTYYÙâ:Úl6Ý{sQZSwk®¦uëÖéСCg5o:2zü"ÈäÉ“e2™ÔµkW}÷»ßÕÊ•+•šš*IÊÉÉѶmÛ4aÂõìÙS£FÒÛo¿øìm·Ý¦Å‹kôèÑš9sf‹ïµÛíúîw¿«ñãÇËb±hÆŒºä’K4`À€f?—‘‘¡ñãÇkΜ9*--Õ Aƒ4wî\Ùl6ýö·¿ÕâÅ‹µdÉeeeiÆŒJJJ:íú:T—\r‰6oÞܪul­–jòz½ÊËËSrr²ºwï~Æó #‹„;!›šö?›ë‡Í’bt2¨Zë6Iq’»\®UÂlÇŽ0`€ìv{¸K€ëøñãÚµk—îRNa³Ù¦HÚ!©F’KR]ýÃ-É#É+ÉWÿ¬úáàçÆÃíŽ]½Að0‚€Aü ‚à`? D¬V«\.—<O¸K€ÉãñÈårÉjµ†»”¨Åuü€q8‹hÛl¶0WËå’Óé”Ãáw)Q‹à„Hff¦>¬}ûö©®®.Üå@‡cµZåp8”™™îR¢Á¡îÝ»sG8G>_X¯qÕ~@ñcˆdœÜ`?ƒ øÁÀ ~Að0‚€Aü ‚à`?ƒà–m@ˆø|>9N•––ª®®.Üå@‡cµZåp8”‘‘!“Éîr¢Á§Ó©ÊÊJ¥§§Ëbៜ)·Û­²²2IRfff˜«‰NüuB¤´´TJKK#øÀYp»Ý2›Ír:¿6Â1~@ˆÔÕÕÉn·úà,Y,Ùív—iC? „8&Î ¿£m‹à`?ƒ øÁ’¤ììlíß¿¿Á¸üü|M˜0!L€P#øÁ­¶qãFM˜0AãÆÓ‚ §Û:tH³gÏVnn®fΜ©]»vI’***”““£5kÖ(77W;wî ŒÛ´i“Ư±cÇêwÞ ,ãÍ7ßÔôéÓ•­»ï¾[%%%y]sÍ5Z¿~½n¼ñFýô§?Uyy¹~ùË_*''G÷Üsª««ói®&IÚ½{·jjjÚc“Q~h•ÊÊJ=òÈ#Z´h‘Ö®]+»Ý®mÛ¶ÉëõjÞ¼yÊÍÍÕÆ5uêTÍŸ?_'Nœ$UUUéÀzá…Ô¿IÒ‰'TPP •+WjÚ´iúÍo~#·Û­òòr­]»VóæÍÓ† Ô«W/-[¶,PCuuµŠ‹‹õâ‹/*99YÓ¦MÓØ±cµfÍ9rDëׯ—¤kòz½š5k–6lØÐþ€0#ø¡Uâââ«={öH’æÎ«áÇëÓO?•Çãј1cd6›•­øøx}þùçÏΚ5«ÁÝ,¼^¯¦Nª¤¤$?^’T\\¬””­\¹Rƒ RUU•RSSË“NÞ wâĉJJJRnn®:wî¬aÆ)55U#GŽÔ$©ÅšÌf³V®\©1cƴצ bp‹ø|¾¯½^o`Øf³iáÂ…zúé§µhÑ"åäähÖ¬Y*,,Ô‘#G4vìØŸ-//—tò*ìIII ¦Y­V¥¦¦J’bbb” ºº:¹Ýn-]ºT[¶lQBB‚’““åv»Ÿ³X,JHH|.>>¾Á<ýõž®¦=zœùÆ ü IJOO×þýûÕ«W¯À¸ýû÷+###ðzÈ!2dˆ***ôðÃëùçŸ×ˆ#Ô§O-_¾ü”yVTTœQ ùË_´uëV­X±B z÷Ýw›œïé8ŽfkÀÈØÕ IÒ7Þ¨ßÿþ÷ÊÏÏWee¥¶nݪåË—ëÆo”$9NMš4IÅÅŲÙlŠWMM¨£GjÓ¦Mòz½úâ‹/4mÚ4UVVžq n·[‹E^¯WUUUÊËË;«u9]MëÖ­Ó¡C‡ÎjÞtdôøA’4iÒ$™Íf-Z´HEEEÊÌÌÔwÞ©k¯½V’”‘‘¡ñãÇkΜ9*--Õ Aƒ4wî\Ùl6ýö·¿ÕâÅ‹µdÉeeeiÆŒJJJ:㿜œmÛ¶M&LPÏž=5jÔ(½ýöÛg¼.-Õäõz•——§ääduïÞýŒç @G wB651ì6×›%ÅèdPµÖ?l’â$ v¹\«Ú§T y;vìЀd·ÛÃ] tXÇ×®]»4xðàp—r ›Í6EÒI5’\’êênII^I¾úgÕ?7nwìê0‚€Aü ‚à`?ƒ ø!bµZår¹äñxÂ] tHG.—KV«5Ü¥D-®ã„ˆÃáPaa¡¤“ל—Ë%§Ó)‡ÃîR¢Á‘ÌÌL>|XûöíS]]]¸Ë€ÇjµÊáp(333Ü¥D-‚BÝ»wçŽ pŽ|¾°^ã8ªü€âÇ É8¹À ~Að0‚€Aü ‚à`?ƒ øÁÀ ~Á-Û€ñù|r:*--U]]]¸Ë€ÇjµÊáp(##C&“)ÜåD%‚"N§S•••JOO—ÅÂ?-8Sn·[eee’¤ÌÌÌ0Wøë„Hii©222”––Fð€³àv»e6›åt: ~m„cü€©««“Ýn'ôÀY²X,²Ûí.Ó†~@qL œ~GÛ] ¤jjjôòË/ëÃ?Ô‰'$I 2dˆn¾ùfÅÇLJ¹Bã"ø€©©©Ño~ó5âÄ ýýï×—_~©ûî»ð&?2ëÖ­SQQ‘¾óïhæÌ™JKK“$•””èÙgŸUAA^yåM:5Ì•Çø¡IÙÙÙ>|¸†®ë¯¿^>ø Ž=î²ÎÚþçjݺuá.¢ÞG}$Iºí¶Û¡O’ºté¢éÓ§K’>üððÔ‚Z°zõjmÙ²E«V­Ruuµ{ì±p—ˆpþcúÒÓÓO™æ‚þ÷ ýüpZÉÉÉšøàƒÀ¸7ß|SÓ§OWvv¶î¾ûn•””¦mܸQ&Lиqã´`Á‚ÀiùMñÅõÐC>{Çwè‘G ¼ž8qbà†ÐìÙ³•““£3f(??_’TQQ¡œœ­Y³F¹¹¹Ú¹s§ 4sæL]}õÕzàäv»óܽ{·jjjÚd[É~hŸÏ.//×Úµk5oÞ>|X—]v™¾øâ ëÃ?ÔàÁƒeµZ•ŸŸ¯ŠŠ Ý|óÍ2›Í6l˜z÷î­Í›7ëšk®‘$Íš5KIIIÊÏÏWmm­Æ'“ɤѣGkÍš5e­\¹R]»vm·íF1kÖ¬3z?°ýüЬɓ'Ëd2©sçκüòËaÍívkéÒ¥Ú²e‹”œœØ•j³Ù´páB=ýôÓZ´h‘rrr4kÖ,¥¦¦6;~ذaúðÃUTT¤K.¹DqqqÊÏÏ׎;a³¸¸X^x¡Ìæo;©ûõë¸\€ÅbQRR’$éÈ‘#êÛ·oƒ‹€kÒ£G¶ÝpD(‚šµzõjeee2þ/ù‹¶nݪ+V(!!Aï¾û®–/_˜>dÈ 2Dzøá‡õüóÏkΜ9ÍŽ6l˜þïÿþOeeeš8q¢ìv»¶nݪO>ùD3gΔtò€à‚‚ù|¾@ ûꫯ4räÈSês8úòË/¼·°°P]tQ[l&@½ÜÜ\IÒöíÛUVVÖä{RSSuÙe—µgYÂ1~8cn·[‹E^¯WUUUÊËË Ls:š4i’Š‹‹e³Ù¯šššfÇKÒ¥—^ªÏ>ûL555JKKÓàÁƒµ}ûv™ÍfeddH’(»Ý®×_]^¯WÛ·oWAA®ºêªSê4hbccïݼy³¾úê«ÀôuëÖéСCm¼•ÀxÞzë-½õÖ[͆>éä!Bþ÷¡ýÑã‡3–““£mÛ¶i„ êÙ³§F¥·ß~[’”‘‘¡ñãÇkΜ9*--Õ Aƒ4wî\¥¤¤49^’:uꤌŒ õíÛWÒÉÛú8õë×/°L‹Å¢Å‹kÑ¢EZºt©ºu릅 ªK—.ª¨¨hPŸÍfÓ£>ªE‹éñÇ×°aÃtõÕWK:yrG^^ž’““Õ½{÷öØ\`ôøE¾H¸²©‰aÿ³¹~Ø,)F'ƒªµþa“'i°ËåZÕ>¥ÍÛ±c‡  »ÝîR ,BqrÇñãǵk×. <8Te…ŒÍf›"i‡¤I.Iuõ·$$¯$_ý³ê‡ƒŸ·;zü@HÐãù~ $þú׿6¸`~SüÇøY,M˜0¡*ƒ'w€¸æškd±œ¾OÉb±(''§*Bcôø€¸é¦›tÓM7…» ´€?ƒ ø!bµZår¹äñxÂ] tHG.—KV«5Ü¥D-võ!âp8TXX(éäµgÆårÉétÊáp„»”¨EðB$33S‡Ö¾}ûTWWîr Ã±Z­r8ÊÌÌ w)Q‹à„P÷îݹ#œ#Ÿ/¬×8Žj? „ø±D2Nî0‚€Aü ‚à`?ƒ øÁÀ ~Að0‚€ApË6 D|>ŸœN§JKKUWWîr Ã±Z­r8ÊÈÈÉd w9Q‰à„ˆÓéTee¥ÒÓÓe±ðO ΔÛíVYY™$)333ÌÕD'þ:!RZZªŒŒ ¥¥¥üà,¸Ýn™Íf9N‚_á? Dêêêd·Û }p–,‹ìv;‡Ë´!‚B“ç†ßѶEð0‚€Aü ‚£Ðq²³³USS#Iêܹ³.»ì2ýìg?SrròYÍoùòåš0a‚RRRBYf«9rDk֬ў={”””¤1cÆhèС§VWW§Õ«WkçÎJLLÔ¸qãtñÅæëõzõòË/kûöí2™L5j”®»îº°¬# c ÇiõêÕÚ²e‹V­Z¥êêj=öØcg=¯W_}UÇŽ augféÒ¥êÞ½».\¨É“'ë¹çžSQQÑi§½ôÒKª­­Õý×éÖ[oÕsÏ=§Ã‡æûú믫¬¬L<ð€fÏž­÷ß_ÿüç?Ã²Ž€Žà‡ˆ–œœ¬É“'ëƒ>Œ;pà€fÏž­œœ͘1Cùùù’¤ŠŠ åäähÍš5ÊÍÍÕÎ;5}út•——kÖ¬YZµj•$i÷îÝŶæõz•““£qãÆ)!!Aýû÷WzzºŠŠŠZœVSS£mÛ¶é–[nQBB‚z÷î­#Fèý÷ß—tòZWÿøÇ?4eÊ%&&ªGºçž{tÞyçµËz:&‚"žÏç {<Í›7Oßÿþ÷µ~ýzÝqÇš?¾JKK%IUUU:pà€^xáõïß_+W®TJJŠ–-[¦)S¦ÈëõjÖ¬YÚ°aC»Ôn6›5lØ0Y,ÕÕÕiÛ¶m:zô¨úöíÛâ´’’%&&6ؽݻwï@_II‰:uê¤?þX=ô~ýë_ë_ÿú—ÒÓÓÛe½Çø!¢•••iõêÕ6l˜$içΪ¨¨ÐÍ7ßN½{÷ÖæÍ›uÍ5×H’fÍš¥¤¤¤&çg6›µråJuíÚµÝÖA:Ôxàù|>Ý}÷ÝŠoqÚ±cÇ”Ð` ]ÖGUII‰ ôóŸÿ\¥¥¥zâ‰'”ššªAƒµëº:‚"ÒäÉ“e2™Ô¹sg]~ùåš;w®$©¸¸X^x¡Ìæo;«ûõë8.Îb±4úüzôèÑv…7£K—.züñǵ{÷n­Y³F>ŸO]tQ³ÓRSSU]]Ý`'NœPbb¢¤“!ÐãñhêÔ©Š•ÝnWvv¶vìØAð4‹à‡ˆ´zõjeee2>--Mòù|«»õÕW9rd{—Ø*'NœÐþýûÕ¯_?™Íf]pÁ:t¨>ùäõíÛ·Ùi·Ür‹Ž=ªÊÊÊ@Ý»w¯ºuë&édX4›Í pð.qšÂ1~èP(»Ý®×_]^¯WÛ·oWAA®ºêªf?Ó¥K^¯[·N‡jråóùôÄOhóæÍª©©Ñ¾}û´}ûvþù-N‹×¥—^ª¼¼Ÿ¼^¯jkkµÿ~}óÍ7*++Smm­jkke6›e±X«ÄÄD%&&Êl6Ël67}gM&“¬V«¬V«:uê¤ÔÔT¥¤¤(&&&$ë è8~@ˆ‡>¯×«ªª*åççë믿֠AƒtÅWÈn·Ëb±Èl6ËëõÊãñèøñã:xð ¾üòK¥¤¤(--MV«µA<›ðçŸG.—KûöíSAA222Ô£GY,ü €Qð‹„PpŸ×ëÕîÝ»µuëV 6L£F’Ùl>å?ï^JJŠRSS5pà@9rD;wîT¯^½”ššÚ ðlŸ¿—Ë%—Ë¥ÚÚZ•••éÈ‘#êÝ»·G¨6 ‚ü€ }Gÿüç?UTT¤iÓ¦)6660ýtó¤ôôt]uÕUúàƒT]]­ÌÌLIßÿw¦áÏ-‹äñx§ªª*¨ªªJYYYg±Ö€Ž„ëø!ÐTè«­­Õ¿ÿû¿Ëf³µúLÞàùÅÄÄèÊ+¯”$±±±JMMUZZš>¬ÒÒÒÎY~À9 îí;~ü¸¶nݪ›o¾ùœCŸŸÉdÒСCµwï^ÕÖÖ†¬×ÏÏjµzÿöìÙ#·Û’ù"ÁŸÏ'·Û­;vhøðá²Z­!¿ÅbQÿþýuøða¹Ýî…>?›Í¦Î;Ëb±èàÁƒ!7 rü€sÜÛW]]­={öè /l“eõèÑCÅÅŪ«« y¯Ÿ$ÅÅÅ)55UN§S'dóD‚ÎXvvö)'äççk„ ![Faa¡æÏŸ¯œœÝpà Z¸p¡ªªªZ=½©Û’×ëÕ¾}û4hР6»0²ÉdÒyç×&ÇúI'ÏüíÔ©“¬V«ÊËËC>@øü‘î»ï>þùZµj•ž|òI9N-Y²¤ÕÓ[²{÷nÕÔÔ„¬Vÿ5òöíÛ§>}ú„l¾MÉÌÌTEEE`™¡f±XÔ©S'•••…|Þ€ð#ø¡MlܸQ&Lиqã´`ÁÕÕÕI’:¤Ù³g+77W3gÎÔ®]»Nù¬ËåÒ矮ɓ'«K—.êÙ³§|ðAegg·jzK¼^¯fÍš¥ 6œó:ïjõx<*//WçÎÏy¾-IHHÐñãÇ¡/Ô»{cbbß ÷=~¹ÊÊJ=òÈ#Z´h‘Ö®]+»Ý®mÛ¶ÉëõjÞ¼yÊÍÍÕÆ5uêTÍŸ?_'Nœhðy›Í¦K/½T¿þõ¯•ŸŸ/¯×+‡Ã¡+®¸¢UÓ[b6›µråJ3&dëëï}«®®nóû߯ÄÄÎìm‹?ÿ}}ýA]~¹¸¸8ÅÆÆjÏž=’¤¹sçjøðáúôÓOåñx4fÌ™Ífegg+>>^Ÿþù)óøÝï~§Q£FéÑGÕ 7Ü eË–éØ±c­žÞ’=zÈf³…feëù|>ÕÔÔ´yð3™LmrVoðüÍf3Á¢Ág¥qðî}²ÙlZ¸p¡^{í5åææjáÂ…*++Saa¡Ž9¢±cÇ555MžH`±XtÓM7iõêÕzâ‰'ôÍ7ß衇jõôp°Ùlòx<ݯmõhËpé_F¨/Gˆ ?œ±ôôôSΘݿ¿222¯‡ ¢'Ÿ|R¯½öšÊËËõüóÏËáp¨OŸ>úóŸÿÜàqõÕW7˜WQQ‘Þ|óÍÀëóÏ?_wß}·òóó[5ýtÖ­[§C‡ñzŸN\\\›_Åãñ´i(óz½ª«« y( 2üpÆn¼ñFýþ÷¿W~~¾*++µuëV-_¾\7Þx£$ÉétjÒ¤I*..–ÍfS||¼jjj4pà@=zT›6m’×ëÕ_|¡iÓ¦©²²²ÁücccµdɽòÊ+:zô¨öîÝ«gžyF_|q«¦·Äëõ*//¯ÉÝËçÂd2©sçÎm~6ìñãÇ+“ÉÔ&ó÷x<ª­­UBBB›Ì^mó×ã̘šö?›ë‡Í’b$Y$Yë6Iq’»\®UíS*¤“»óòòôꫯª¨¨H™™™š‘×ëUff¦bcce6›e2™BkjjtàÀeeeÉáp„dž-l6ÛI;$ÕHrIª«¸%y$y%ùêŸU?üÜx¸Ýü€sàóùäñxTWW§òòr½ôÒKš3gNÈîÓÛxY¯¼òŠ,»Ý.«Õª˜˜˜…>ÿ½†÷ï߯Ë.»¬ÍOT€Ž&‚»zsd6›e6›¯>}úhçÎm²œ={ö(--M6›-°ÌPr¹\*--Uff&¡¢Á³Ù,«Õª‹.ºHûÛßär¹B:·Û­?þX²X,!}uuu:qK««Õ½{÷Î9~À9ð_g6›e±X”˜˜¨Ë/¿\Ï=÷\È.°ìõzõöÛo+++K Љ‰ é±}n·[ÕÕÕr:êÓ§½}Å~@˜L&Y,Ùl6]pÁJOO×k¯½vΗwñz½zÿý÷• ôôtY,Y,–×çïé;|ø°233'Ç¢Á8GÁ½~V«UqqqºâŠ+d±X´bÅ ÕÖÖžqP3™Lª««Ó† äõz•••¥¸¸8Y­ÖôöùÏD®¬¬Ô”žž®¬¬¬³ž c°„» šøÃŸ×ëÕ°aÃôùçŸëøƒ†®¡C‡*&&¦ÅÛ­™L&y½^íÞ½[Û·o×ù矯ôôtÅÅÅŽí;›Àç¿ôŒÇã‘Çã œÈQ]]­¾}ûÊáp´Ùmà‘ƒË¹!|]?ÿ%^jjjTQQ¡üü|íÙ³G—\r‰¨”””ÀÙ¹þ»eTVVª  @_|ñ…ºt颌Œ ÙívÅÅÅ)&&æ¬íó×TWW§ÚÚZUUU©¶¶VêÑ£Çô@+EÃå\~@‡?Ør¹\ª««SUU•öîÝ«¨¼¼\555r¹\2™L²ÙlŠ‹‹Sbb¢’’’d³Ùd³ÙÓç?“÷lv[­VÙl6uêÔI‡CÉÉɧí}4 Á]½@ùC™¿wÎl6+&&FV«UV«UTÿþýåv»!Ñêüïó?ûC_ðîÝPœÔá{„>0‚b&“©A ó‡8ÿ±G^¯·Að þÀøüó#¬ÎÁhÁ=sþÀæ?žÏóïÊm¼K7T—n€à´¡Æ¡Í\]swÞh%‚ÐZâ{€¶DðÚá.ܹÀ ~Að0‚€Aü ‚à`?ƒ øÁÀ ~Að0‚€Aü ‚à`?ƒ øÁÀ ~Að0‚€Aü ‚à`?ƒ øÁÀ ~Að0‚€Aü ‚à`?ƒ øÁÀ ~Að0‚€Aü ‚à`?ƒ øÁÀ ~Að0‚€Aü ‚à`?ƒ øÁÀ ~Að0‚€Aü ‚à`?ƒ øÁÀ ~Að0‚€Aü ‚à`?ƒ øÁÀ ~Að0‚€Aü ‚à`?ƒ øÁÀ ~Að0‚€Aü ‚à`?ƒ øÁÀ ~Að0‚€Aü ‚à`?ƒ ø„%ÜD*ŸÏîb&“©Uï£í£mo\´½qµ¶í†à׈Ïç üðC=L&“|>ŸL&S³?´}t¢í‹¶7®Ö´½Qü‚ø|>y<ª¬¬Ln·;Ü%!D,‹RSSÕ­[7ÅÄÄœòC@ÛG/ÚÞ¸ZÓönW»Š\ÚÔ£7Á/ZÄYLê•bQÿ®VYbÌ„¿ ¿z>ŸO^¯WN§S.—Kýû÷—Íf wY—Ë¥o¾ùFN§S™™™2›¿ý! í£mo\­iû]E.•œðip¯NŠá°÷hQëñê‹Âí*¬ÕÀŒØmot¿zþîþòòrõïß_V«•nÿ(bµZÕ«W/}öÙgÊÈÈìhûhGÛWkÚ~ÿQ.îÙI¯IUÚ>Z˜L&õM‹Ó'«ôÝn¾mot?}{\‡×ë•Ûí–Õj sEh V«Un·[^¯Wf³¹ÁxÚ>ºÑöÆuº¶¯qû$“I^o‹DÈù|RŒÙ¤·¯AÛþ~Áø"ºùÛºñÿüýh{ãj±í½’øDŸú0߸íŽ ‚?€¡ùD‡_4¢M›FÚ]mm­Ö­[§êêêp—‚0â{í¿yöÙgõä“O69í±ÇÓðáÃÏxžË–-Ó¨Q£tá…69ýoû›^xá}ýõ×r8;v¬¦N*³9òò|ðºjÅŠºøâ‹Õ§OŸp—vNœN§~ÿûßkÇŽЉ‰ÑW\¡9sæ(99¹Ýjà{`\-µý¡C‡tóÍ7+//OYYYá.5¢Ebß¶_èõ··è€óˆ’“ìʾòÝ8úʈüwýÒúͺ|P?ß3#Ü¥4im)~!2~üx=Z’ôÐC©{÷îºýöÛ%Iiiig5ÏuëÖ©W¯^M¿7ß|S¿ùÍo4uêTýèG?Ò®]»ô§?ýI¥¥¥š;wîÙ¯H ^—^½ziÆ á.)$æÍ›§N:é׿þµ\.—–.]ª hñâÅí²|¾ÆÕÑÚ>¢EXò{gk¾žzéMÝ8úJÝrÝHì;¤—7ý]G+ª4}Bn¸Ë;ÅÆ÷¶)³kß#²‚šyÿuè :w¬,eee)..Nv»=ð:>>^û÷ï×O~ò=Z?üᕟŸøìk¯½¦ñãÇ+77W¿úÕ¯TYY©±cÇêØ±cz衇ôÀ4X–ËåÒã?®™3gê'?ù‰† ¦ÿøÇºóÎ;µqãF8qB’´oß¾À2o½õVmݺU’tèÐ!]qÅúë_ÿªÉ“'+''GÏ>ûìi§Ijq=‚—7iÒ¤Àò¯‹û÷ï?ë:#AYY™¾þúkÍœ9S#FŒÐèÑ£õðÃkèС÷¼ñÆš1c†F¥Ûo¿]ûöí“$-Y²D?üáïóz½ºîºë´víZI-og?¾ÆÕÚ¶ÖÜö•šþ ’Z÷=Dh¹Ün­z㯺9÷ûš:6[ÿ[ÝrÝHM3Zïmß©šZ—$é`Q‰þëÏiú/ѽ<©üÏ $I…%åšøÓÿÔÖüÏtÏožÐÌùêÕ·ÿ~Úi’t¸¨Tÿõ‡ç4íÞ…úÅ£ËôYÁ¾À4ÿò¦Ý»P÷<üx`ywýú·:q¢Fxî-yöåvÚJ8¿vàv»5gÎeeeé…^ШQ£ô‹_üBååår:Z´h‘f̘¡•+WJ’6mÚ¤Õ«WËn·kþüùºÿþûÌï›o¾Qyy¹n¸á†ã'Nœ¨·ÞzK r¹\úÙÏ~¦®]»jÅŠºþúëõóŸÿ\¼ÿÍ7ßÔ/~ñ ]wÝuZ¶lYàpsÓZZàå-_¾\W_}µ|ðA•””´¸.çZg8%''+##CO?ý´>øà¹Ýn]pÁºå–[$IGŽÑSO=¥qãÆéùçŸWbbb '077W:xð $)??_ÊÎÎnq;ã{߃phMÛkiû6÷ÔÚïa4ðEÐãpQ©*WiäЋŒ¿näP=³ð^ÅÆÚär»µð‰”’œ¨‡çýXß»|=½F‡”Öió??Ö'Þ ï]6HkÞܬCE-Os{<úÍ“/(#Ý¡Gçß©ËõÓ£Ë_RÅñªS–wÅàúÃs¯ª¬ò˜ß÷%ÄÇéöIct×”±aß~8Á¯|ôÑG*))Ñ]wÝ¥ÌÌLM›6M&“I~ø¡âââd6›UXX(›Í¦ hâĉêÔ©“L&“âââ×`~………’ZÞ…üÑGÉétêŽ;îÐyç§)S¦¨K—. v­ýà?Ð%—\¢;ï¼S111Ú³gO‹ÓZZàåþùúñ¬Ç\©©©-®Ë¹ÖNf³YË–-Ó\ {ï½W×_½–.]ªŠŠ IR×®]õÆo覛n’ÕjUzzº Nþ/ùßþíßÔ³gOmÞ¼Y’´yóf]vÙeJMMmq;ã{߃phMÛkiû6÷ÔÚï!B«¤üäïGjçÄf߳뫽*.¯ÐÆŒV÷ô.ºqô•JI´ë½í;ï¹~äåú·>½4ùÆÑ2›Í:PXÜâ´O ö©ìè1M3ZéŽÝtÍ™dÒ§û¾]Þ W©G·4ÝrÝ(=ðÓÔ9Ñ®„¸XÉ$ÅÙl²Ù¸zGÀ1~íÀétÊívk̘1 Æ)%%E=ôžzê)­X±BC† ÑܹsÕ·oßfç×­[7IRqq±22š>¦¢¨¨Hv»½Áô /¼PEEE×™™™’¤øøxÅÇÇ7¸9}SÓZZªªªS–×Ò:„ªÎpëÚµ«æÏŸ¯Ù³gë½÷ÞÓŠ+ôá‡jùòår¹\úßÿý_½ûX,JNN–7èö¹¹¹zçwtë­·êÝwßÕwÞ)©åïK0¾‘ó=ho­iû`-mßæ~ƒZû=Dh9’“$Ie•Ç•–Ò¹É÷”­TB|\ƒéç÷Ì„FIJKM‘$ÅÚlеÊãõ´8­¸¬J¯Wwþê· —UzT q'——úíIkçõèvŽkŠp!ø5!TWò÷ÏÇápÈjµê7ÞPRRÒ)ï5j”®¾új8p@>ú¨~÷»ßéñÇo¶ž¬¬,uîÜY6lÐÌ™3ãóòò´|ùr½úê«JKKÓñãÇåt:$¾úê+]{íµù5uׂ–¦µ´ÿøÇ?NYÞgŸ}¦ .¸@Ë·_³àùú|¾s®3ÔÎd¾Ô| ±cÇ*!!A×^{­ìv»î½÷^UTThóæÍÚ¸q£þô§?©gÏžzíµ×ôÄO–‘““£åË—kË–-ª¨¨ÐÈ‘#åóùNû}ñã{ÚïAGºƒGkÚþL¶oS¿A“'OnÕ÷0øtò_‘ #½‹;%è½~¬ ¹#ã7¾÷O½¼ñ]ýáÁ9J휤Õ5:RVß,ÔˆË. ¬GãuòùÔâ´”ÄDYbb´tÁ=êß ¦üÏ NYÞžoé¼ÝsÊü#…u4‰]½í`ðàÁJJJÒÓO?­#GŽèwÞÑM7ݤ¢¢"åçç+;;[[·n•Õjmp“ø®]»êË/¿ ì:ô³Ùlºë®»´bÅ =ùä“úàƒ´|ùr-[¶L7Üpƒ4dÈuíÚUÏ<óŒ<¨¼¼<ëÚk¯m“õ^ÞôÜsÏéöÛo×áÇ[\—¶¨³½ø|>ýîw¿ÓÿøGkïÞ½Z¿~½ÒÒÒ”””¤ºº:ÅÄÄÈd2髯¾Òºuë|¾gÏžêׯŸž|òI1B:u’ÔòvÆ÷À¸ZÓöÁZÚ¾Íýµö{Â}$Ú·›%F“njֺ·ÞÓš7ÿªŸïÖË›ÞUÞúÍ9ô"ÅÇÙ4 o/9’“´nÃßTX\ªïýS¥•Çô½Ë¾«olk|¤[SÃß¾îß·—ìâ”·~³JVèƒwé?Z¢’ò£ –ç ÂÑ=hÓ&ü†Fî‹N´iÓèŠ0‚€A°«`hìêN´iÓ~C3I¤„( —-‰DìêmÄl6«®®.Üe  ÔÕÕµx†-m½h{ã:]ÛÇÆœ¼¤×9^åÆd’<^ŸâèÞ:›¤žÉd’Éd’Ýn×þýû•••%›Íî²".—Kß|óìv{ ­ýhûèFÛWkÚ>#Á£oÊj••«X }!ÑÂåñê›ÒuKðžÒöFGðÓÉŸÏ'³Ù¬ÔÔTk×®]òz¹¢g´0›ÍŠWZZZàÿþÚ>ºÑöÆÕš¶ïìSAYµ>;T'——p-bc|J÷¨wgÒöFGð«çÿAbb¢L&“jjjäñx$)ênHn$þè111Š‹‹kñþ´}t¡íëLÚ>)Ñ® MÇÕ«¦Š¶­i{£#øÕ3™Lÿ$&&ªS§Nüã"þö ~nzÑöÆEÛíÙ4‚_3øÂmo\´½qÑö0 Î]0‚€Aü ¢#?N¿áÐa3HG~8‘ü|žO‡{+€öÔÚìq¦™¦]DZðkŽOÍo¸ˆÚ  jµ”E:D‰„àwº åk4Ü!6,ˆzsÉ™dš°ˆ„àw&üØ‚hjo¢¿×OõÏÁà9‚ žWD‹´à׸—/øuð‰Áïñ4z¿¿QÌAŸñ÷®©kˆ>M…2o£é¾ ñÁ=ÁgûŸØÑÔY¼M-+¢a¤¿¦øÃ›Ô°Qüš ŠþÏŸÐ!5 {‘xñjÐ>¼M 7¾+‡G§îné®Ííú‘üš:¶¯©<‚»XýÃþK¶øßïwíã8?Œ­ñ™¸{ý_ê¥qØkÍÙ¼ÕÛ'Efð“ZÞå+Úã×øtl/_pðSÃÀØšºÈrðÉM]¯/x7oSóiêuDˆäÔÜ5ö‚{럩kn4Üx>ôô€`w×6Õë׸§ÏÛÄg ~!КðgÒ©»rcš™G¤¯/hÍÝZ-øŒÝ¦vív¨Ð'uŒ Ôšðüº©K¶pМ¦\sÇÿI4ôI'µtkµ¦ gî€3ÕÜåYšÛ-ÜÜëˆÓQ‚Ÿßév۞ɵù:Úº€Ð9“Û«5u™––`Äêˆá§¥Þ¿Æã;âú€ðjܳ×xZK¯#ZGF­ €­ù,0ž3 m:ðùEKbw.•3Ù Ü¡Dc0ŠÆuáÑáÃ^0£†$£®7øVT…:ÀÿoHýÝŽ@€»æUÎ)ðp˜tIEND®B`‚ellie-commons-sequeler-9963fb4/data/assets/sequeler-logo-transparent.png000066400000000000000000000471511512323162700265250ustar00rootroot00000000000000‰PNG  IHDRÓsÕè÷_zTXtRaw profile type exifxÚ­™i’9r…ÿã:6Çr¬fºÁ_ßC&Énv÷˜I–±*+*ÀŸ¿éοþûºÿâ_¶Þ\¶ÚJ/Åó/÷ÜãàEóŸŸŸÁç÷ýýÛéû*üùº«é{Sä’^/çó3 ®Û¯jþ^Ÿ¾îêúŽÓ¾…Ÿ¿IOÖëïûÚw ?×Ã÷w׿÷ü‡å|ÿÇõsŸ±û=W6cã¥èâI!y¾7=%1ƒÔÒà{|ß-êJâµ¥ò¾·¿ß;÷óåo›—îßïßw¤?o…óåû†òÛ}¯ûíúµCœQøñ2þùççÝ»{w»÷|V7ra§Šû.êǾW¼q²•éÝVøªü7^×÷Õùj,qQ±M5'_Ë…"»}C;ŒpÃy?WXL1Ç+?c\1½k-ÕØãzEÉú 7ÖÔÓvÔ(¦EÕ—ãϹ„÷Üþž·BãÉ;ðÎLýË—û»‹ÿ—¯ŸÝ+膠ͤôáSà(L3 UNßy ÷»§öö÷}¹ß‹ó-l¢‚ö¶¹±Àáçgˆiá¶Ò«sâ}æ³óŸÖu`‹x¶1™¨€/À;”àkŒ5ö±QŸÁÌcÊqR`wp—Ú¤T(N‹z6÷ÔðÞ-~.C-B-R)MOƒbålà§æ††%ËÎÌŠUkÖm”Tr±RJ-â¨QSÍÕj©µ¶Úëh©åf­´ÚZëmôØf½ôêzë½ÁCCî¼cŒgšyÚ,³Î6û ø¬¼l•UW[}wÚ´ÿ.»ºÝvßã„”N>vÊ©§~Æk7Ý|í–[o»ýŽŸUûVõÏU ¿UîßW-|«¦Šå÷¾ú«j\®õÇAtbª‹9Pñª 訚ùrŽªœjæ{¤),Rµ`*ΪÌ'D»ágí~UîßÖÍYþ_Õ-þSåœJ÷Ÿ¨œS龕ûkÝþ¦j{,«¹ŠÒó•yYHôÉ0s kì-]Š4Póa¹l6˜à/ÛJoº?׌hÆòÝë&ªXoŒã„–½a³¡€©eM[ÛôÅPVÒ|ÇÖ_p?iæU0ªYD jòŒÞì÷{Tüž…¥ë ¬Úi-Fm~U6{ÀÇcÁBèeZ+§‹€<#¶H{îÚ…ýú¿á`þ€‚û˜¶Ý,»”"ÓåW¬˜Ý;;õÛ)°DŸf;…›iø>ï°è€ n#?Á§+£Ð:f•6À2ðì1Öô{f6 f§,«_Ä:˜¬ê ÇÞž‹BÎjÜÑÆé=-""| a4¶uyæ„-Dx$V!Á~áPEMîñÙª¨ ™6&ƒ(?ÍŒ.àÛ&kL¹—¨)óbFl®–T ”-‹.X“N‡â[_VDõëf7t– *Jœë)ò_£âð‘xP Û¢OL&‡Œù⑽Ñ~ÐQÏ"·€@Ô{§:Ò¹…ž².J›#•.â/3‰ïEᦜäA¾ÞÈè v[Дæ®é°ehReŸ¶:$:$ýP_ˆ§ÇÒ%sd0Z0)" /ã }™û+zϨd0ú[Rl,­²e ²Èž°0àB0$0½€Þá7à ÀY8ÙÞ*»çdÂÒÎYz=Ÿs9 ê=›î×…K-#\&×vO´€b÷°aÀwCxÞ€wŠ8›‰?âÒ¼” U¿Ø^Ë•à‘ñ$pjMù˜¾Ö雸à_">¸é\Z<>{ÕÆ0ÎçÍ VÜÍÁ *Ö‚â7 »±[Ȉ(JÔ…ÞRÐ,wÅñ¨–ºP2•C.!LÙ'ÙEª5Ѱì^ †æ¤ç& S–GßríDZÞD¥ ¨ÖöðÅGÂBçUTà$;x~¯Š@yü@+ue”POA®‘§àÒvèNn³ðëào÷YT á«ÀI(¨± Q'–^½”ŒFZašÚÒÁú‰‘¤7t6ÁY­‚ðÓÆˆyòOZ¬ŸZôAžëf½ëì’d%ÝSXR¶è#D?Ò–7V 2þbœ¼x‚XÀlðtû&H¤¡¨SÒJ„rãÌM²h DÒ+Që·È[1Y ôDŸŠ5P΂ܦ>†Kê¤C;ïÂ-slWß)寏âQœQ­ˆDõ8ŒNôH G¤”ê²!Ȳä¸;ãxÖºÐñ§ÉT¡Þ èšò0â?ÐæL½Á]H#Ã$½–yƸh$°õä¨Êsº«Ó0˜‘õ2ú:%bøÙ°ðè/Ûê”]/ä_†Ò6Ô¼3;ãy¦¹uZQ.t²úvÔ‡í,8±$¬‘õh üd—â\Äò[˜­.ž¬°Y.‰5áËx¸c¼Ã6g¥z¬úrÊöëWð2é˜Nš6ˆgj€¦¿ŽhÓßñ3Ü’§ôª“°Sn,Þ€}Ôí’ÎÆkÇ}#›à DD©Ùùð£Èk);(-â‡sÌ;ã¬NÂJ#]sékVx ‚z®¢ÔcË0Ón:wp8;gé4 ]A§5yÜŠ×íÆ\ýóØf 5µ~áA*/H’²Óvw·LÿªììÄ‚\¤Ž-ô¿‚ 7¬Gcój+ Åß´סÔäÈ`Fo=_ZDNh¨ïä»Tq!ÏsAR[S²l‰U¹Ëc¬®§gÄ Q'DD8—Hì°›PÂ6¥u\$|vDõ?œÈT`׉šBöxº ¡Dv¶WŒ^%¹º•tâGV¦eå¨a¿ô†ái!êˆ6þp~ß÷\ñrC+5/L²ËØÙ"G4Z¤¦b7Ë(#®„ÝÂÚTæÂ8ំ6w6UH8>Þg‡aW†ë=dæ…¨hèKyÀ§GîN=Äb¹ìá:\mŸŠÈ=ÐC• ŸÅð¼ ô ¾ªgêœþñ¶4Rúœbºa*‡_ñøn˜þ#æA¿°e$; .ž±l9f%€ô…kÉ(¢cbVBšÑÅçnà[Ç„\Éá À­6ˆv­feäQJÕ)¹¸ÓÀP-Y„ ¶€J»¡xºÕÁFSvC{‰ç|‡fݦG.¯¸L+“ž‰ȼ áy¿]À#¦×Ô Òê´úL)”R´ ±+È:áW"|Ö²pþ´ÈLØœRg‡7ºÄ0ì«–è3qïÙ*¨‰¥<ÇJ3¶) ãTÞnn!h1ˆ|¾è|„žÁ*q3+›/nª¤#?Fy2ùÆÁú1ï^]Ó>Ü-Œr³ÇÎ]Œ[6l1ÑdÈ¥ÉX©å¦Þ}`µ\ÑÙÐ"’ËÐ<:¥¤ÅiõÒ*Q›Ùqlõ=±y¥ú :®:ÁʂʔÆ|à5ÂŽ±u” y0Ç©£Ïó9útÿpö‰žÉ,vxé©0_ïUꯙbÆá]éójÜ×m„œc°I2k%Q¡> ”Ö¸DªÙˆô| ¬…ÙR€¥Dsܯƒ /™pB¿‹*&ŠHQ¨SöX¼«³È<»(E<:l¾CÔeØLËkã=Æ)7Tÿ¯“BgZ¸KÀ‚A×ñèc‰.[²!>xÌÁjH¬Ùb片„BZ˜™VÝÛIÇ[ëP†:ï“‚F´;·éX†?ÉzœDœ˜pô²E)Yw%¨>(“f"AÑŸYdG§ÐW‘3¾úˆ“¦AÜç&Éž$bD–§SÞïlïIÙ"$Ô“ª³£u*pursÖÁ”Þ‡c…ŽÆÁy’2f˜˜ Ó6‹á)t §M7¾ó¬šuØ`Pb-âªóòƒ¥0|wÒožv:ŽÔ3GHÊCtüꇷdR9£»:.ŸfÝç›æŽ@*ãj§ÍØ_là H^ÖY?ÖQjæ/yE%l%TlÚuº¡£axLŸ)@ºƒD¿]çå€9*~ÔLŸ3è£/ÉìQ'9¬Çš‘y ˆƒ¨O2X•‚Óf‡Êuú /²-ÇþÎÎZÇ«¡ñQüŽë4ÏCÉ´Äï€ßŸ³8T,x‡Vd£&Û_tôÁ_2¹_a¶Ö³§êˆÜ‘‰Ù/y,£Y`¹(öx—¤ê~»ëº×§:¡6±¡>$THaS6ŽÙèL *f°z h3üÉ“JÜ ± žLh·(©Úo#‡ÌËBÐà06ô‡¥DsaÔƒW«Åë„Å€\-8 :¸Ç2Ð_ÄJ«±É2îhýòMSnFr× DØ…Ë ~À…ó[Ÿ‡e§//¡ ½M/ôs7t¬",1+Ô:rÿ¶_eõ8bKGDÿÿÿ ½§“ pHYs.#.#x¥?vtIMEâ 8:Áµé¬ IDATxÚíy˜TÅÕÆçÞîžéÙPP ¨Œ²Q4‰F#ˆQ\"J>C4nQ—I01qMLbÜâŠË‡Û'£‰wPPcÔDÐaXfíé¾÷|ô2ÝMÏ0K÷ÐÍÔû<ýôíê{k»UõÖ©:uŽÐ=XÀ`/À‡AGá Àzà@M•ä.<©ý~?ÿûß™1c.gΛÅWGD$ñž“¿’_»úê«¿yÚi§]——W¡šÈ ùÝg»û»§Ó…BN}}ý>øàÝøÃ^–?øð# 7¹®òî{ïqÏóæ›Oó«_ýŠ;ï¼Ó´Xƒ,„$SWWÇìÙó˜{ÖößÿKãõz8FÍËËyá…~ãâ‹/¾Þ²,!ÏÎÿVUçž{î¹ôºë®ûGMMÍ»%%%¨*Á`ˆºú:>úhwÞq?|øÌÛn»í8`lAAÝÎ;10000Èf2M’J‡Ï™3güܹs¯” èFÓ71/“'O>oÁ‚‡EV r•L LžgvæÏÀÀÀÀ ‡ÈtO$Á=‘€ ²„L ¶éÓ§Ç”…â¯?þøØõŒ3:­¸ÕkJÙOgH5¨Û¶Mô8M0$ ÅÂ}¾ðiŽ@ €ã8±ð¼¼¼Xxôþ\#àø#D>ŸUEDbeކR40000dºK¬xy~­  ßèe &Ç ->ž_ Ïc€ÕÀ&ç}^[{  LîwåŒÈI ØçóÅœv{½Þ®U5!¼;ù3$l```½°ÒADÏmê‚P‚g7´G[á/}q3 ¡Í4„¶ðbõïsB MuO[h{’éî*“Án"ÓK¦[!ä„?¶í:|Mͧ´„BC!>­Y›Rh[’ig® Qô"2mÏÇf*LbÝfX·­l=zè€`\xK,|Bÿ“ùxýZ>Z¿– ³rV)~Ï´#×ÝIÛ±Aö¢[{¦Ñ~Je)ô§T9´ËNÏMê?›Iýgw‹(³€Û“FS)#ô"É4[%ÁlK»3’iwÓ6’©A’éžL‚éJ;*uvT)å60000ØýHufãØ`0ø”ã8ÒÞÀÞûóžžH»¢¢‚ššT•þýû³iÓ¦Xxô:ÞÝ´KKKéß¿ÿ´@ ð4ÆkŒAV¡C^cz¹$×ÔÔÄ®£äÙÞuwÒ6RªA·ñŸgÆr¿Ù:°8o0â¸MÅdˆL3EpfÖÀÀÀ`w™ò ¼.iY׆LÓ€ï™.[¶Œ¥K—ö8Éô6^±bË—/7l```°§I¦V¤‰l7nÐ2—viiiï2tÿS-Æm @Ü>@DŠÀiÁ’Tj±´ÇY‰-+¹¦d‹é¶]… Do(©µf ÒJ¦n¤Öc˜0a---)úè{‰ùÚ2ˆ†]רÙÓxܸqlݺ5ñ…¸® …téÒ¥:qâÄÜmqUê¡.ðMD§£:·idr[ · TÃ× X‘E”Ëê¶ |ˆèˈµ„†Â׸IšLW60èè dH´§È´¹¡¡aKAAAÿxë©H´• ÂßNܵ&½°dNQ·5@$¼Þ¬¾Î 3ùÛ¶mÛNñZ–EccãVÇqšV¯^›-íl- 0ð?윺Wl¥ÚñŽnS}Q¾|uFA]€Ÿo ‹û±§jP£éÖ…aÕt!Õžé¦÷Þ{略<ìt|#"Ɔ€  šhr…f§ZÔ" BPGwjouîóùxÿý÷—59ÙÊÎo>ŽÂÀ‡ÀõÀ^)—.ÚëØÚn§Ï¾…r?¡Â/¸|û¦[dƒdºú”SNY¸|ùò¯•——s]·m[½‘ohq…fWhv äHLèhWÌP°-%ÏRò\—<;¼à›ÎUˆl×¶m/m˲ðù|ÔÖÖ®>óÌ3«rªuU©‡Úà¨þIYÎ5 /¢¬À’wÁÚ„7´ƒPS#vžõ•â8eX Fu¢#AF£›HLÂ-6]ÚÀ #Ò¨QpÌ8™>ðТÆSfÍ\:vìØ .\xÊèÑ£óûý"’Ró7Y® ºB½#Ô‡„Gq´=Ft[Àã*Å^ðØ.b+¶„ÃÓEŒ™’(3)©FÂÜÆÆÆÍo½õÖKgŸ}ö7n\úÐÃ6:¡æ‘FÕ϶–Ǿ4‡R,þåvnÈ‘6X6‚¨²ÑÛÀ“±ÐŸÕW"î7PùÊ4„òؼÎÃ-¦[t®©‚LJ¦lß¾½¦´´ôùÃ;l p;àœpÌésv :ò«ùyùyyù6ùŠŠò))+¡´O)Þ‚Bl, ѰÀ ­‚hL(uEQÇ¡¥%HS}=uµÛih¨£¥)€ã*®Þ¯UWq!ò\%)<üÛuÃã´ëÆÝ!*AD°$¬Ç"Hø[Âß Vë="`YÑë¸g%|_4<ñ^Aâ½71\]¥9àhqi8áë€Ks‹KsÀ¥ß–—W¾üÄ÷ÿê€MÀêíÛ·7>ýÌs¹"‘ZÔ¶<qD^nø/èÙÜà¥[ñÿº¨xx€k¥õÇ¢z*T•®2ÝÚÀ`W³xÌviO)@mmm#ð@YYÙW,X0rà¨#¾òô†A4yŠ(,°),´)ò{(.ôPThãϳP‘°¬!J¹ö-‚ýŠ„ýŠaC#lhPÖ7ÀÇÛÇÇU C.E-.-A—–‹£Šë„ ÔuW‰¬«m„»àjøÚ‰»†V²³­Ök+rm[Q’•ÆÂ-"÷†¯í¸ëøxì¤8-K°SÄ%Ó†F‡†&‡†ÆPø:ò;¯e;SË*†Ÿrô˜Šyóæm–ÖÖÖ:9ת¶….™›A…;í?hÈ;žÛ%½ Bðxø£fx000È.2¢¬¬løœ9sÆÏ;÷ÊêmMi „†€: mò Ûýà/ÄõùW„í ïÖÀ»)âõ¢.ê‘æ&hª‡–&$Œˆ±­«»4µ'šp¸¢C¦ù”°ú±“â?:Wþ&§ªäù@ߤ7á/°=´/ýËö>oÁ‚›¯¸âЦ²²²·kkksgƒãüæa8zUxI (ÏSæ›Æï$ÃkÔb6‚ ²LËÊÊLž}ú•k×®­½óÎ;s¦E…¬+â]åì@B§Såk6ÝÍÀ [`”zŒLËÊÊJ<þ®»îºÌï÷÷O)uÞG´ kä"à³\7Q›7iHä]Ú–â—÷ ÀÛr¿éfY£„”Y2=eÖL1bÄa‹/^8dÈ¿ëº8ŽÓæÀÖš>]Û*kG2ÕÖ÷BcÚÒÎ3»"¢lõ{ÚÕg<eee>øàÓ¦M;õ”Y3ŸX¸paö.— “:ë«\_¼Ét3C¢{:R|Ýu×]2dÈ¿ã8íJd­GOÂ/ǰ­¸„÷Eí˜ô÷IºI4%˜I1×=΄B!vìØAII‰çÆo< Ø7»%S= ÖYÃøÈt1ƒ^)™:è ƒ£b:.”D$ÎŒìb¢düž&¢±±‘aÆúeukréÛ —èsÓÅ ²vö‹QBÊ,™———vÅâOÆV%z¹ßÓP(DqqqÇã)ÈrWlI+ÖžitþÚMÉ8,w`B!ˆ8-`}è*,{V|œù½ó³rŒCÙa0BI8¿BtÊ:,ëcœà›œy`3„å¯ ÅуÁ À"UhBd#Ê*çu&¹ç)ìmZTD‹w<â2Õ>XØ„O nÆr× úoT¼L eM¾õ6/Myã°äkû ZXXÒ„º XlD­UجNE¦^¯×K²dºlÙ2T•¨û/ã{43i¯X±UeìØ±É/ElÛöey—Iô5*îžc+÷êÍ{a¹g€|GG†Í{IøŒWÄHIÂo×ë>_ú·ré u=šß?¯êeÍAôdÜ–ƒˆ7ªÚšÏت‚ –äî—béýHóCœ:º!eÜ÷tâžn>å”'v:K–xØÚwYkžØÄ‰_=¦Gêæ¹7oCô¸´Oâ¨ñk2’ÖëKûLÐ ¹ûÆBˆsàq5(€W`Å ÿ¹–ÀL:zkNh³g&"§`‚7ÜGïéÅ{ŒR+\Õ[vPýèã¨ÜÆ€ï.K{žêX«|‹* g?ò¾¦öAœKif&––<§ôƒ ëR‘©eYÖNdšŠ`wÁíÉ\ZZš²ž#^|dΜ9Y¼6£[ýîÉ~9O¢¿ª®¹t.ˆ/Öv¹ŸC@.ÃÅܰñò=Wð£þõÍï_þ[Œ“÷sTç…»\ÊK,‹˜‚ÊÔÿ[îùøvü™yc‚I¢dTØ¥|~\,”sH,m¡ç¤1aT‰iAÚêO{/½4ü åD$¹µDÞIÊv$ úeDƒÏw+þy uÖ LM³´–I%¤ù(ΛO³^Ú¯“i— œîé|ñÈ_ë\*¿ûIËÝÚæ\öÙùÿE6ÍËÁ¹ %¯ý:ŠŸè[VGCU™0a“&MÊY‚Ë;v,ãÇÏMâQù°µ‘JŽ$&Î@­÷AÎ|ípÒf” Á6îñ¡òšCïrÝg_Íœ4ºv2Á¼wq¹$‘ä$Õ ²½UJ‰r„ß“_ü:w¸oÒÃû¤‹Õö8¨ ¯½üclë]औ…ÔÈPÕÀçìd‡-vO)ðJÝ×ø×?÷JKþ2mØ~íâ‘ùÞ@õ _âä:áÎzµ@cŠrG›Ç±à¾KÍ¢“31£ÚÉË”.*¢±åY”*Žøµ1IˆÎJM¦©  ƒ9%ååbþjkk©­­%Ë÷FÛ‹Ia?nùZné–+Ç@ú%™ü­îEø޵7Íý½\ZYÁ¥•{sI¥‹JD¾ ü¤6)Ö¡Xö«Üøùa Ò™àþHµð&ÈÏ9Œ V2w˜0wXŸ}Ƀhý2"ß~ü+iÀƒe½ÅÂâödˆ9[‘J"ûÀÇ«¯ÞƒÊÍ„ƒÄw†µÀ-Ç"ÁŒ?ÌË„Ã0þðA¬­Éò!:ä> 9iàGˆeüëùý³ºüŸ.þ6ªË€ƒ’&ÙÍÀÓ(ç ¡ö:¡˜½NØ—Aß-Äë)Æ¡\¬Nšh¡²êEg`ò_G¤~šO!ú$Î] \ˆÈ|Þ ¼êÇë-Çu¿„Êx”3P~‡#ÿðt)fŸ3+ó·ÛayÞ@CÛ#3êHc”+€rjP\°åzT/LìÓº±® hÛ]œ;<Ðæ³Ø<<Ïo¶^¸ø áSbáÙ°êbnÚ8•ó½–üþqÍtÐI°P- ú–ûsÎöVÊçªÄLj›¬|¨âžU‡€{p\LJuå9îÿh*Û¬ÿ‚SÙæ ½·bÉÛ¶-¦' Æk@.aâ×C$µ\8s¦‘P‹yýŸ?ÃËõ ß- {ãÊ?xûï9ø[³®üŸ<9 ô1À·ŒBôfZô· ;¡íóæÓë€åÀrtÑo¨–3@®GáZjm§bæí鯴•L›ZnC9¼uÛAþ…r.ysRy¸j¶Ÿ„'ª‘è î¹Üã{pIò'ª3øIËrˆHÏG¹0)tA÷Ëü¬ßŸÛ%Òd\Z¾‹^ˆÊñ@KÜ?%(ð›Õ¥ÝÎï­ŸŒÆ’$"¥ô,~8ôè6‰´=œ>ì-Nߪ³€ˆ’öAyœ¾¡Q±‰AZ;SŽ·}Ë÷'4‰H]y_Á(&úH›Dš “ŽÜÀØ#g!z~R ë!-²»—YIo¯Y<áa¢§CÂñVcéd†Ì¸°]"Ý)k3œt'b¬KȧËØüðØ4¶¹0™6,< eNkôòòÆãŸÓ)W‘»$SC‚mcúôé1e¡øëã?>v=cÆŒN+nuÄšRÖ"äù]ëë·qnàûYŸ÷ª­_G¹6i™éIB-GR5 ë–œ.ðªß'ìg)Š¡xó¯ïV~ï^“k=Ä幕c™7ôÎn×Ç<Œk}#î}Å‘§Ò¼Ô¶ûÞwºÒ~ùµÓ=;ab üž¯ý{ŒÓõãa‡ù;„Ÿ&’žLaXùO²fâ²þñ¾À"\¼ƒ3‰Á3Þìr¼•3V#òˆÄNdÓ‡Z÷¡‹|i)¿RBã½{¡Ü÷ßÝäÏ™‡Ìléô|*DdÛ6ùùùäççcÛvìÛ¶ñûýøý~lÛN¸¿°°ÂÂB<O·ÒÞìóù®£÷$‡ï‘Rh›’’lBå‡1%¤0<r^àª4;÷Tm,@t! g¯õ5*úžDՠ½xШue’€ðnÜ8¦Ëq6Ú#‡ =ÿÙ÷…´ÕË×!rjÜ»˜óm4J8¯¾:ô­ƒ´ÜÇäCÒ)i´MB=â:Ðû’Èà*Þ{¾2+ê²Ås Êà¸F½Çú&û¤A·ÿ‰+A¿›ôÆd³ž›žÌK1jßQE$}š‚½ÏFºæÊ1-˼ë^îX%ܾRø,à…ohñÅÂ7[•£69ïóðÚ3yxíØz/g%`¯×=²’òZU»“¿œ"á?z¢ò‡kK—²½åÎ |*µ²+Óy—Äk©nF¬YÌ“`Ú’(©¼ø nvl¡úó.Åuóç —$,Ù‰ÞÁ‡>šöª9uÿÇÃÒ)^i/GHn@Žý‡ÆÆsÒš†å»ak\µãÈOv{ÙW->˜™@óÂi|é¸ô©®œ¹¸#©Ý]Äš»óÓû7QNŠä|+.gvÇ`„•"zn£P„ú<»¡µƒµþÒ7ÓÚLCh /Vÿ>'¤ÐT÷´%¶'™î®2õ<¡Úç\µÓ¢’òe„‡© ¼Ïù“9Iíݞתý¹ ±¿ÊO¸¼ïgiMgžwÚ¦qÓçûv:.;ðC 8®v·ÑÄ%™“æœËIu„£7ãå¥#œ¯¥†pGÕÖtžRƒ+¿H|:%Kòwoȯ’îfŸiO§žÛrP7 ­¤°°‹ÛFI@õ÷ŸR|j·œr¤G2Ý !'üÙ°m×ákj>¥%" ñiÍÚœBS¡³dºÇ/ñ&6ZåÞ_"z¦J#@`ïÀ§\Ø´€ó›‡î¾¼Ï%¶ï «Ø¿ÏÃIêÂÖÄul ÕΣ[¤vx)=aŒ¸‰ó÷«ÍXñå•Àsíœì}pÝK“Bžãë__‘‘´|Þûæ¸:ïCŸP7,FEÞcW¢W>u8„¸‡k2Rö²S¶áòHBÛfw,~}@ÁÉwu{¡3„ÓVø”!Öm†u›áÐÊÖU±CãÂ[÷s'ô?™×¯å£õk™P1+g•‘¼^o§®»“vÎñïó£Å{ ðç6ºîÞ¨\Žè*.lz ›Náü X¤iS*U ä LõZfJf¤0ÝiL˜Ö©8ª× ŠŸ àqoÏx]‰,̉æ¢Ò’%ý€ãÉ•_g,Ÿ_=tÈ“ D¨2­ëåî6sœ•Ô8aØôU+¿eÝ“r[–¤§ÜzGW÷IãáéV;Œ ðS*ƒL‰hü ?¥2È¡ýwVŠšÔ6“úÏîQf·'ª*"ÒéeÞ=–mÀ9œ¸¸Œ°e{§©²2a*VS-5>ˆê]ÜPøVf3·ýp`¯Vg  ô`F“´ôÿp媸u7o)áܾ;:(TÌH þÁYC«3þÁçðyBÝ7¶ÝÅ£ÝM[|3 ›_ŒÆ·ŠÃ¿þJFó,îÿ¡ò½¸4Ø-u÷îs…Ð2=©>ïÎhš'¼BÍ£[€¾1îr=S€n.+K3Žïþ´të\’³-íÎH¦ÝM{X"þ}Þ¿ù}Þ,=¸è‘‹Š&eÀ9ˆ¬àâÆw¸¸ñÇ\ZÛ'C£êwÛ/sñ€†ŒÖCÁ^mçPg,EéÔ$r}¦GÞßÜ‘[“™=÷Ž<Ëw’¢ü[ƳmñvRšƒw‹VoQ`*Qs•aɾÇ~)ë"Šè;IcÒó«”ÎÜšž×Ó I0]iG¥ÎŽ*#e¢Ü9‰?䝿wù?Ä›7Õ3Q^mkå Лq¼¹¸ñ.©f åÈÄ7óƒbXCø½„]ÜQzö¦5e$‡áõžã!ùObuõ•–Eø€C&‚néèWW;¤ë`ÛMZûŒ|#©·.aø1h|o'Ô¹ÊWº?™Ò7Ò7×ÙÍ—Ë|Ûm·Å޽Ä_ßzë­)¯{Qv×J¿óßÅïòÅ–€_¡IVOZ‘èɨ¼Ã%õ‹¹¨¾ûã«6£•jìWz¤ì‡I-¢c†Ì}VØQë9ÞùúaÏ ¤úŸ¤3Ľ}wŒB)J˜’i0óíFª\à£$#{u§vI,äåj{&åyP7'Ò úfº²×)¤ž©¯Ü!àšššØõ¦M›vyÝ´÷xò½.%7ú/§$?„#½˜åIŽÃæm.møU[Jºœ¦“7r§>ï®ì™†Î¶¤®XÖ¡ç\ë€$"[Éû5÷\å?’vv_Û묭‹¯$µË/˜:µ¾‡r»-1m)ëÆ»ìÊ ) £’êcUÏ´=«6i.ЧÛåV+mQ«cõg¤ÐlL{D•¸\ïë O£Ñ?ÕyhRgØBõšóÞå’“º”–íïf.-ßÞC%ÝžÔH:80h²W˜÷{xº»)½ÑíÆ¶¦]îô$ ê«{,Ï’ÔnD:I(V÷ê|Õßö‚©§gÈÔ•ä¾YÖí8-oÚŽ“uX+oÙ²e¨*'NìQ’ém¼bÅ T•1cÆÐëq‹Ô·s’þ…}›f¢zÂW’^ï‹È ü¬ît~]Üɳ¡:(¶džèo ª6Åy×ÈvP^7Ê’|¼^oÄçk4í²6žJ· >ïÑwâJ=i3³±›üÜ+„ëP»šíÄåEWkxå•¡ÝnÉí­c/¤¬gëN÷ÚiuX=ÊÚ§‡v¹,5=¡NqÒ*U÷•‹¶õ<™ú|¾˜Ávã-si—––æ¶¡ûLàq€‡@æ’†Y¨ÜÄk1æ¡<À¥uA~SüXÇ_¨$Û™¸a)#þØ™DØ#zò4úŸDFæøþÝÖ¡T÷&?a¹ðIDATJaÇréŸø[ë{ô]ØRßë­5'B2Wf´ß6⮣ÿ…Rµ™ð¢Kë½IÿEÇhÚ®UØÃe8)DßÃi«Üž¶ë$¹þK*·( “ÈpÚ>ô6/2/Ø•‚€6uíÙ6eþÔÓä€ &0iÒ¤=–à:š?ûîÈÇU]·µ²Ÿö¸qã?~üÎ/ÄuÝP(¤O=õT/ÉDùmуØÎH”g“^Œ…p??«ë¸vc‚MÕ6ÌŒ¥ú/¹SvætÿíùÓ–º}V4½^¬„äRØù÷½‹6ÔfÛÈô^r'uP•Â8ƒþéiç)·¦µNœL×dsCCÖ¨jt oii¡¥¥%m ç"k„]WÇW%ü»­Æ}"P{ÉoÛ¶­[=Y–EccãVÇqš’ÿ땸¦d …Çw'u.?*é„6K~ú6MÛ ™—8«Óž%S'Ôd‚Ç/øK†È¤#÷¦T:{´I4×ù“.ö‰ŒNB3©—y7½÷Þ{/M˜0᤮.7î‰ûœ®*. "8*8VlÓ¸‰pÚ²ÓsBx…ÂRÅB±"û5í >Ÿ·Þzk PcY„•ªt.M ƒ€£âZÀ8~^7_ñä®i¯Âûh!îÿîÔá¬äAÀm{:åq+Åh¥ÉÏÄK$îævRà ôh½‡$/MöëewZBê¾òT^‰µ »4¬¤5~uÚˆQ’ÚŠÛF|€J\IxFߥ:—d ¦¹¢ãí¼½:’¤zp“JYGŸ;ÙÒÖRu‹Õ§œrÊÂåË—­¼¼|˜ëºÝ&¨\'àÖ3ÂB‹+Ô¢E-BNk»l+PW±-%ÏR|€W\ìh¼í¤mY>ŸÚÚÚÕgžyæB`Ugïñ„ú³†3pu%$,Ùž Ó¨áðÖ}­\Õ÷‘ì.´´$Œ0*=»gæÑ¢´FÝUÚmiKsÒsÿåðIôŽN§ÍIõäKßÉѲ§—Uw"Óûî¨ñÔ9³–Ž;öÂ… ž2zôèÃü~…ˆtøLjW,S{ŸéŠ7ä*A‚ŽEKÈ¢.! /ݶå™SUÛ(b»ä{\òl¯(¶´[nccãæ·Þz륳Ï>û7.½ïþ‡ÕmÁ ¿.üœKëÿœ7¡=œª-%TíÂÖ­jSRçê“%N”DE‹{6yOa«²›ˆ°ûè®Á즤™vy¯éoJcìµK/+{$Sjjjj***ž?ì°ÃÖ·Vz8pÂ1§ÏÙ1èȯæçYäçYäåYäûl¢¿óó†Y\7,p©*®‚ë*ªeœÈž¡«žêÞˆSl7¼¼ÚvxäY”ðwìžQ‰"‚%`Y Hø[Âß Vë="`YÑkA, %äåçQP\LIi ùEÅäù¼ˆ^u¤Õ2œ$+jº„‚ABÍ 4Öí n{õÍ46‡hnv\š[\š.ý¶¼¼òå'î¸øPlV×ÔÔ4þíÙçM‹M9Át¡rn\÷ðŽÚ·J£Ö&$^Ò—ò̶&jKÏ’©åí&K»Ùà6%,“ }zM_SÝÔªU+€2mLU•êêêF"öC+++¿º`Á‚‘Gñ•§7 ¢ÉSDaþø=ØE~GÉÔu5B˜à¸Q’ hô:ž|¯Æ…»a’uâ®S†ÇÅïÄ]C”Ûj½¶"×¶%Y‰h,Ü"|¯~Ög[ø|6~Ÿ…×cá±Ã÷ôˇ¡ÅÂÐbدXØÐaCƒ²ª>º’+ˆ„óÞÔäP×äÐТ¡Á¡¡Ñ¡¡É!¯e;SË*†Ÿrô˜Šyóæm–VWW;•ž{-š‹ß&¯Á8Gã»$StcÒï~90šU'JERÚ£É;R‚hú÷žz¶yw¯ÎT7&åê×kúšHRŸ!Ÿ1rf}Ž€=‰L“i<*++‡Ï™3güܹs¯¬ÞÖ$°‘Æ@ä`P(";Õ¥&äöÛ£véÞ”ÿ‹&lhw(>%¬í´Ÿ–jä|“x¼WˆUP„æ ¶µ,¶ï€w6Á;mŒ¢.n(Í ¸õ;ðéj¡¯Æ©özÀ_`3zh_ú—í}Þ‚ 6_qÅM•••oWWW&m7I—ÖoÆUü®gÌ¢«“:רJ:|fëQ‰?{@EÃÒ,iïå£ÒÄÁµÓH¶x4"Y±ýcm!ظ_A ñKåù…+r¦èjsž]é€É“'»úꫯ¶m»`P¿"¦õÞ!ÂkïwgîM÷ï®>ë"„°hrmÔK“zp°ÂZ½í½7¬ÁkcãøÉ#ˆQ·­´eúôéW®]»¶öÎ;ïl>Ä`WƒCCÂTS¤`׃ýo¼n|ç*áÛ÷>Éârþ7)à«=<˜–¨Ï'.úåxiÁÓ#ùÿÇŠRBZÔ­AUøwÒ~ñHV¬ð2fL0'ºJwÈdäÌV>ý!Ðê½ÉuÊ)2ͬvˆ´tðàÁãïºë®Ëü~ÿî­Šd·áü޵=ÅÅ'…V+@ Íô±šéCë§L›>}¬fJh¦Ä P -x a‹"h»« –eùæÏŸÿË#Ž8bLee徆,wù¢û%ýnÜå3×”lÖ$ ”S³ºœ¶ýARH97¯ß»spàNNW0s¦Ä/ –ôHîCúµNœJkƒL›ß‚qD;‚ãzQo{+60†q¸€ÚLû÷ï_8jÔ¨#/^|ë!C*âÏ6îÎ#,»“´Ý¨‚rÃ’ªv`ë(fqKÀBñDž¬ˆ’R[yVUÇ)¿ûî»o={öú÷ïÿÌ}÷?´É4Ù¸H ‘†²¤YwMŸ~8+®âþ’µe?h-7¶h%PÑñÀú˜°÷®™F){;hÔhºŸEø˜92³êê*‡ÄÆÔ©õ,y}Ê¡±Îo¹Ç¯õŠþæò,~›L‰~‹%K7øqÇÖfô\9«õ99†ªmeTõ©ÍÚò*/"ÌŽq‚Å÷€Ç2žî}}¬ŠØ`Ôݽ'ÑZ”xœ âÏ6s•76=–ƒ¬g÷иÂÌBõò,ßoO©¸-ÿÀòo$¤‚!õßžéÍÃPªeÞÁ×]wÝ%C† ñ;ŽÓ®´×Û¬!Iø LÄŠQ܇?¢nÊûöåP(ÄŽ;())ñÜxãgûæLÛþ~RH€¼âw:öpÙ3Àæ¸F“zv–O$lÔ«~‡›Wf~™T­ãº+Ô%uе ñ©spFó¿dI>ÈÑ;-umä\H¢i¢ýxùµãzEq¿&MŒ~œSeÈ-¥"ÓtÐÁ]±´Ó¼¾ÄŸ°êÌ'*ÊJÒnlldذaã€Þ£‚ßQüd[ª3“B_¤J;ô|•´ Ü“dóô‚n9Ï4BüD¨~,ïÌÌ>*(§¥™œßHêY‡d´ E'Õäíî3uÂzT’$1ëJTsÃÞgwËo¹w$J«r4+Ÿš¸Ç—»“dZ\^^^ØKB™ëǽÛïi(¢¸¸¸Àãñ`Ÿïº&.÷tNÒóÜ@¼U›°{·_fm™/Ü„pGRWþ‹>ðe,ÍûV O¯„­o$-ýœˆjfÊ,Yâ¹´c^\:¼Bpu ­z/¾–Ý«é2¸1ô;V$ÙÎý#+Vx{ëP”ŠL½^ïÎõ±lÙ2–.]Ú«¤ÐÝ‘öŠ+X¾|yª—"¶mû0hÅOOÎLœuÊÇl+êÜþaUÑ 7&”çò‹­Ù»l§òû¤ À~l*¾"#iݽ&WöxƒyKx€yü½C3#•–œ|9­q1ñ \MšÜÀK¯eï{"ŠX—è¼ô`ú|þ›)@©•Ê3‰×ëÅãéÞQ0CÀ»Ž·´´”’’’m7ì…ø´ÓN à¢Æ™ >µÔJ§"çs»tþ¼ŸUz5¢%ô6åA~¹urV–ÿܽ××·N"ôRnùôÛéO,t=­Gbjíûàì fßðTB˜Ãµa)2xjùá(¿ÊÈ{ð†ÎÔIt€.}†¾ö¥=¾;æ{’×MX½ø|#™¶AªÚ®sð\ ¸\!à±cǦtžõ˜£=㽤Jó¹¸áˆ>ˆ’´„"äšÂ®iVI30¡!Ž ŠPžã[NÊ`y¬./må"&?#𠲈?­ûVš·pת(?Š“ˆÏù"}{O’4!ñlî—¾%ö§W‹XOÞÙ½ÛJ~iÀ”)Ÿs„Ô½ñð /¿œ¹‰Ø¢Ev÷ßoòá„ÎÞO ½ÕOýMCÛÌ{–”Wdš²ßƒƒÁNôÃÜ'¸Ý‘¿ÚÚZjkksÏo‘[Åÿ8ÿâ‡Î¥Ì×ýÒÿIjsQÃtê›þÊ•$@ŸÄ_pA÷ˆ­ü߸œ‚ßÐ Aþ—_n¾Ÿ_Õ L[y®Ýt×~~=EÕ븾ºk{á nÂr¿G¢2RèÓܲö2ªºaUèÞöâ/«Ÿ½<®žoáŒá€¦o»aæÈ7‡ã$;€ËxôýÛ¸­ûoÏ~PÎâ·oFå)ZÝóÕaˉÀGiL§NzW.N¤¢ö^~õZ–-K2›VY¼ùÏ)¬xáv†ö{»ëñ¤qqëÀéu¸L6ÆMˆÑŸ²&ÿuV?9&mi}¶h/ª»/}‡jë˜l!ÑÖ™l†È*¤¼Þ&gF#ŒÆu¯áœÐ'ËY†8oð~Âí²¹S±]¤…„šÂ’c‘æÓP”z«Cîg[Ñ™üVºhü—}žäÊm'aYƒ›ßÊÖ2GNdÁ–ûk!¡²W©’Ž«s\÷E!jŠèá¨~qGF^,ÝÚ¿ùѾróºãž)ˆx3ñ¢üšŠµ§ò§µ×àñ>ʼAÓn¾}ÍAˆóBò$nµAYDѰ¨›»¼´¶i9õM þè—êÙôõÉ#ÿ¾­¿™“švÏ3+ópÆ¢îL‚SJãÎR6û]Ž»ŠgV¬ƧõðþoäÅ¥ zCÜ õÓ:‹W_½‘™<ù_Š÷çû‚g –;•åÖtÄ9ßûYÖôúý¿ó «ž< ¬ç}âþ‡%o²æÉç°ô/xígt\cǽ%ª·‚ËTD¾zX6kK§eoÂ(egþvÂ}(ÊPГQ |!˜l>EÜÏk;hÂÒZÅ?ªeˆ–ÃpbIË9h#ÂEüÖk¼å÷´jUídàQ`¿¸2壜îYØ[¶sõæe "ú)HJ6Ũæ#ø û!ì‡Ë ÞéÎò 76KŸ$lø ZE‚Þ‹Ûò'þüé+À ,] lGÝ,é‹H_Tû"z 0q÷N˜¾‡hß̺Ï.¤jxÔ-Dzáf\Ã|>Ÿ•/!z+Rt3ý{¢ËA¿@¬­¨@èƒ%å(刎&Ø04?Éß&@ ß瘱/D~¯ÍH»?|âM¼ðÚÇXÜG¢ŸÏ2\.FÜ‹yå•jD–ƒ»hÆÖ&”BD Áõƒì…è~ÀP`8¨–&£…ÊÂñbØôU¬|f,â>úÍÄŽ*Gãr4-n€Oÿïm„wOA·aI=¸…¨åE(Ærû ²/–îÇÆ­#2ëb0ÃÎÁ vüžéÓ§óÄO`YVìZD8þøãyüñDZ,‹3fðØc‘J©«3içá°”Þ0¬ þ c‡ö;\FEy u1¿ñš‘ÒT•½ÍokFÓä¹ ÑsA¼Iå)Ž9ªÕfdŠ"KʉF-¨Gä|~0ì“þõµóŽ»†“G~À¢w'õ0ʸ¤zó“P&EL‡Xá´Ý¸lÄæSñù’§q˜ÇwŽs¦k3æªæˆÉeÉ›#‘àõÀÉhØÕq\¾*A§'´è²kÔCÕ®QòY7 ?¦­:š5‡ü¸è—ÔÞó@&‚NLlƒq^¢mRÛh_áø–áZ«²­ø™S ê¶m“ŸŸO~~>¶mÇî±m¿ßßïǶí„û ),,씆p¶pü"¯×»'9|–B£ø³õs\kp°²]©µ3n"3mù3–=’ë NÊ‘FqIEU}.–ᠿ¶¥ÎŸìzöÛZ—°‡Ÿdo~:`ó$=ÞF~´ßÌr–‰È‹±J;1+ßû9ÈU„dD "m%Ót7噣×P±y2p»2+Ø~Ú!DÿŠr8Ç}í8¦œäƒÓZ›Ñv3uÜ6y6bÜ4v£,ÑwDX‚r2±Gœ›–¼¦ÛÑ»T¹ =îNZt(ʈ¬NÓX°ä·(#pâDÐEOZiÐBïªdÚ¬xy~mØðû7zh‡·®6´øx~]4<V¸MmrÞçµµ·Êä~çPΈœ”€}>_ôÈJÊkUMïNþ²Ÿ„E¹7€7€Ÿò#í‹ú–u0ª£PŒè”½Š;°L¬ÀgÀ‡o ¼H}þ«]:öÒ]\Þg-ðnÓ‹Ù´õH\¾ÅDÂçËÚÔ•u«Aþú"ÞàË\0xkFóû?û¾¼ÀÍ뾄‡Q‚0hËûS#®|„Å+ˆû7œÚ2¯wbŠ/c>HÃÆÒÿÌ¢E·##ŽDõpDÆ‚xV4ZÑ ² ô-—±[žáØq_´™†íy74/ÖØÜ‚Ï3R–)þ œÆsÏCAÁ1 ‡ û -lg©?^e5»¸ò"ù×}TC÷ÉÓ}KæÅÈÄ–w3Rö§×77±öéCpœc&¡2°í]ôsÂ>c?ÆålëEÎHÏÄY™‡#Ô´Ž%žtÑs…ÆÈnʳ„3†„¯“ÃO¾~é‹› hX;ýÅêßsBå­Y/…¦ºÇçó%ë®®Ó•vNàO²…°G–çwúï"-¤‘bò8بUéG8µäåoã·²=ëÊ– Ÿ|ÂøÍÖR‚Á~ØV˜T]u°t. ôë¿5mRgWpîÕÀo#øË‹iöT"ÞR¼€ë6 ¡zæÛÐaía ÛÌŸu»hû{äÆÂ•%øûâ•ð~¤ãî@œz¾;¦sdxÔèMÀí=öŽ:ªx$ò ãå—+éƒF&–¶Û‚c5 ZÇ¡‡nAÄÍH^:úàƒm‡û|ç-¢nÛÖ,ɇº¨SŠÓʯÅr¨³…Á3›2–—òïgì½§G2Ý %GJ¶CÚéššOéWV„k׆·e¹Ú–dE[K»ñ×{ìogq½4 {DY.-ßNâÑ”ìÅ™Öu;…ŸÕ‰8Bþe`ˆu›aÝf8´²u"~è€`\x«ŽÅ„þ'óñúµ|´~-*få¬2R\×Í ‚Ëe.--Ý¥¡û¨ÏSƒ,#Ó$¸$8_† &ÐÒÒ²G\¶äoܸqlÝšh¾Õu]7 )fqÍÀÀÀ 'È´¹¡¡aKAAAÿxë©H4Û¥¼\$àmÛ¶í¯eY466nu§É4YƒìC*mÞMï½÷ÞKmy:1ûœ=Ÿ?ŸÏÇûï¿¿„ÞjËÓ {aÖI Ú$Ó5§œrʃ[¶lYmYV»îÃz fl,j'm˲ÈÏϧ¶¶võ™gžùð‰i²ÙC¢F ÉÀ Šøe^ìÊÊJ­­­ýϸq㮾ýöÛO;vì„¢¢¢r˲¤£dÐË”ä—kñFÃTUëëë·¾ùæ›ËÎ;ï¼Çêêê>¬¬¬Ôêêjà™ÀÀÀÀ ;ÉÔÓ¯_¿|É÷z½Mõõõop ;\×}Ʋ¬BUͼ–eyEÄ䩪WDšE¤(yšªªÒÆÔ5>\’ÂÛ»–ñ´÷Ü.çÕI×ÚÆ=º‹ç’ïMEr*;û‹TU­WÕ| U ¹®‚"p]·Á²¬/òóóWz½Þ&)èׯŸµyóæf hš¯AÏ£h6Õ``Й7oÞìTVVºEEE¡¦¦¦`^^Þ¯×ë³,+ÏqŸmÛ^×u½ªêµmÛVU±,+ä8N^<¹Eˆ4™ðâÃãIURpJ2Mñü®wWdš’#Ä×Ö=ÉĨÉ$÷|BÉñÚ¶p]×#"ê8Ž#"A˲‚ŽãmÛnq]7 [<OÀï÷@ËæÍ››k[d!™¸ÕÕÕñŽ›ð4ÈÓÒÒâ žÂÂBËqÛqKU% ň2J†Idšð» BM–d¾Û ç”ÒhRü;‹Å)$ĶH6îÞ¾“þKIÄɤý-"!ÐØµˆ¸¶m; ®Çã ù|¾`uuu("š%]ƒ,…Ù750ø\¡¢”{UöIEND®B`‚ellie-commons-sequeler-9963fb4/data/assets/sequeler.png000066400000000000000000000105551512323162700232260ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aËsBIT|dˆ pHYsÄÄ•+tEXtSoftwarewww.inkscape.org›î<êIDATxœí\kŒUvþέGwu÷Ì8ÏŒíÕŒ‚ÅZ©Ô·NŸ:çVsoÝ{«ê$H A‚ $H°¶@]¶/lð-z—}­&Hyç|€»åHí–a8ÉõÛÏ>ûì÷yä‘§R©Ôóòó²ßɱî÷Ú·eYöâââçÓÓÓÿúòË/p]J¥F«¸åé§ŸÞûÄOüXÓ´¡ {/J/ÑOß@D"NOlÛ¶íûÙlö‹cÇŽå\솯n%ÀÔ}÷Ý·û¹çžû±ªª?…•ZA/Ñï€×£¾.D$n»í¶=sssŸÏÌÌ̸µ¿n$ÀØæÍ›wMOO?kÆFW8¨¹ßX©.D¤Ýyç;Ož<9söìÙ«æ£ôu䆇‡¿ûî»ï½=bÛ¡1H½K˜º¨ªš¹çž{nyï½÷~yýúõY…ˆª•!ºªª;Þ~ûí?›˜˜Ø¡ÝÀ¤€G…\.wóáÇÿjxxx;€\Tv£Jð»o¼ñƃ[¶ly8"›mc5Üccc»>ü#;¤¢°Õ-àöC‡ÝûðÃÿ5u{maÍÜ£££·lݺõÚÑ£G¯8§‡Q$ÀæÜuðàÁ¿Bte±g-¼n]¦¦¦îܸqãW|ðÁ"€o:±Ùilؽ{÷žW^yåït]_ס­’€;hQºùæ›ï2Móó'N,˜ 룓™œœ¼ëÍ7ßü›¡¡¡:°“¼Š u!"eÛ¶m;O:õ‹Ó§OϘ ã3ìý:{ë­·þÁ[o½õÏSSScB,%»uA£°ÛÍ`÷ú¼™¶mcvv¶°ÿþ¿üè£þÀ¥ öÃ$mÙ²åÞy矚š2¤”µJúU¶ypеò^ê ²oUUaæçç­ûï¿ÿO?ûì³#J µ@˜iàä /¼ppjjʰm»eæ·Ó*úÙcÄÝ·eY˜ŸŸÇðð°úâ‹/þ9€oµ&6ÞqÇ¿#¥ |`T&î‹Úw¡PÀM7Ý´Àú ~Ã$ÀÐèèh6ns1pQù¶, CCC™fÞZ!Lhš¦5?ùä|üñÇ •k…A¸xqóýé§Ÿâøñã rMÓHQ”Àë0a^Bxoš¦5È‚"Iš•펌Œø^çê,U·¶+ê ¿îçÎÓ4Û:&*¬µ¤Ù¾};`n.Ô´¿‘½Ö,ðͰ‚Òú¹Êw”ƒkôÀõÓ÷ -”u%¼ô 3è¾»9Ãê8ýâõÓ÷†3¶(ø|68p`ïóÏ?ÿ¯3ŸþêÿP([uÖXUÁšYHÝ©¤›MàäˆÛ&¨TŠ‹@¥²Lçß&ã_[»ç OÝ:]¢ bÏÐl½ñ71¾Îà#GŽ<óÌ3ÏüÀ „Ÿ%wœvïÞý½ééé Ã÷S°° · ¶‚¼-`CÀf,xOœ`¨Ä0ÈÂbÃ64b/‹6è@ªÕ~”¶ºY)e套^zêµ×^û/¿DHt•"†Q·“³§@«Žè3ŠD†$2B !k›A62Š ƒ$2ŠŒ"‘*1–•¢@?×á½R—ØPÄ0œA—`I§Gp~­œ»ÿ  1ª­•îf°{½¾À#ŠWìŽÖ½Þ}»ºe"®­XQ«c||wª3¨k@Œ(bÜÛ€B€"ê6rîóJ­•×m=Ðòeà•°VWB1a¦¡(bÜ•»•bè§ã½]Ä=pQûN(bb¸¨|'1!Wß ELL•ï„"&„ÝA\T¾Š˜ç¤I(bbõóCBßÝœa%1]ôPÄT±V)bÚù"8¡ˆYÅ1~´0õeæ„"&¡ˆI(bŠ˜nøn ELv›é$1ÕJ%1 EL¤vãâ;¡ˆ ¡³š|'1 ’N/|'1]À ¶v?„"¦ :a°V}·ƒ„"&f¾Š˜é„A/|Ç–"f% zPÚ­c*œv›½ËU¯KŠ˜0ˆcÒ¸"IÎ.Ggù§L °T&ˆiš=ŠELX0è§oÉMT£Â)³p¨n¤³•lª•k²*N&,L¨,EL3Ùj[àê¾ BE:¯°h Âñ³C°äŽÉZøŽELØK;A$»–d˜L(Øó–À‚ XL-©p˜ĨQád‰aÕùrÚ¥Âiqýb@“Hë ÜýtJäÒ¶8'â2z0;ݨ#_bðpÊ~ºŽl (b„€*©t ™¡! #BJ×@ŠR}Yi,@õÃÀ–iÂ*åQX˜ÇÂõK(”,”JvŒ)b2 ²†ŠlFA®ºï&€CáâÄöP¸¸åšÜ«ËuòA ˆQœcuE@׺€¦ ¨Š£³> Ü8D¸q¸aˆp¾\¨Òáüï¢ÛË;\AR2ŠE .EL>Î1-di³ÓeРÝ~§nìÙ‰URYˆLœÎ€ \%ÃjjŽ´LP){q\.Vµî°ŠXRĸ2 :p‹r?ì± E© ÏЬúRá4@:¬' $ ²A)˜P![RáÄ‚"¦] úÃ¥mÀe3q–rb¨$¡³ CXHÂQÝÒl" «¶ÂBŠß4YÐ`µE…Š˜¨I º˜hҤ¡‘¨.¡}*†ZtºT8ÍêÌ#Š˜VûíèÄe ¶XWP] hbg™˜Aµ™ÉʾcCÓ «iUÐ¥Â`ªÛиK_½ T8±¢ˆº·˜¢ðí>Ð ÚµÖÖ$BøN(bbž4úN(bB ®¾Š˜˜.*ß EL»ƒ¸¨|'1 ÎI“PÄÄÜ÷ -”%11ðÝÍVBÓEß ELk•"Æû(³óEp«ÏÃ{½ž’PÄt1it]¯Ñ¿ø•™y™¼“úõe Ðn劘„"fÍSÄ´ÃÐåô„"&»Ítꃦâ{`õp+•PÄ$1‘Ú‹ï„"&„ÎjòPÄx0H:½ðPÄtƒÚÚýtŠ˜.è„ÁZõÝŠ˜˜ùN(bz¤½ðPÄÄjKš„"& N?}w£~ EL‡vÝw˜úuB&NïÛ·oúÊ•+_ !Z>Êl«!pÝB+ßB¤ÓiÌÍÍ}ùè£þÀWAí‰P&&&R…Bá[ëÖ­ÛõꫯþÉöíÛwær¹Q!„¯­°–vFÖ¢]WÆÌ¼¸¸xõĉŸ<ùä“oÎÍÍý<“Éœ¿xñbiD[Y$´õë×§UUMW*•43¯+•J›¥”„YfNЄ©R̬Q‰ˆr^_ÌL^Y]¨®ìWW¿²×ÖJ6Z}ÊÞ ê'_©ÜlÆD 4Ì̜̋&"@™™-)¥ À$¢²”2/„ø&NADsº®—,Ë*ÍÎΖ´õšvÐþ[LLL©TJ/‹)Ó4Sš¦éBˆ”mÛº¢(š”RcfMQ…™IaÙ¶ªóEÕà×û'¼&«¯c]Òø&€Ïñ :mžgËàVƒÕLÇL†'ðuÇ/³áµ«(JYJ©Û¶m‘)„0mÛ6E©H)˦iV4M+†Q.—Ë•‹/áÌÒÚB§7p mÚ´I-‹šeYj6›¶m+Ì,˜Ù yËuÇ/Ûo’ÞcÙo“„ò=GýÆòi‰>eöè6üzþóMo"¸ûDÄÞ2IEQì|>/UUµ Ã0/\¸`Áié¡)Qp5³Iž Ê­d~¿­Ê~ûí¢d¨/·ú]I֪ܬÇéÝH€ ~ÛI¿c¼²Ve?¿+¡ÙEz¿o&kðž¢_ Ð)‚´öNϱU/àÝïß|1A‚ $H þMi6%ˆ£YXIEND®B`‚ellie-commons-sequeler-9963fb4/data/io.github.ellie_commons.sequeler.desktop.in.in000066400000000000000000000005541512323162700303340ustar00rootroot00000000000000[Desktop Entry] Version=1.0 Type=Application Name=Sequeler GenericName=SQL Client Comment=Easily connect to your local or remote database Categories=Utility;Development; Exec=@binary@ %U Icon=@icon@ Keywords=SQL;MySql;Database;MariaDB;S3;PostgreSQL; MimeType=application/x-sqlite3;application/vnd.sqlite3; StartupWMClass=Sequeler Terminal=false TryExec=@binary@ ellie-commons-sequeler-9963fb4/data/io.github.ellie_commons.sequeler.gschema.xml.in000066400000000000000000000060141512323162700304610ustar00rootroot00000000000000 360 The saved horizontal position of the window. The saved horizontal position of the window. 360 The vertical position width of the window. The saved vertical position of the window. 900 The saved width of the window. The saved width of the window. Must be greater than 750, or it will not take effect. 600 The saved height of the window. The saved height of the window. Must be greater than 500, or it will not take effect. 260 The saved width of the sidebar pane. The saved width of the sidebar pane containing the connections library and database schema. 0 Total amount of saved connections. Increase the amount at every new connection, set a unique ID for every connection. 1000 Max rows to show in Content tab. Split results based on max amount, helps generate the pagination. [] The saved configured conenctions All the configured connections you saved are here true Save Quick Connections Automatically Save a Quick Connections into the Database Library. "" Current Version Check current App version for upgrades on startup. true Use system font Whether Sequeler should use the default system font 'Droid Sans Mono 12' Preferred Font Set the preferred font. 'solarized-light' Preferred Style Scheme Set the preferred style scheme. 200 Query tab height. Controls the height of the Query tab. ellie-commons-sequeler-9963fb4/data/io.github.ellie_commons.sequeler.metainfo.xml.in.in000066400000000000000000000522521512323162700312660ustar00rootroot00000000000000 @appid@ CC0-1.0 GPL-3.0+ Sequeler Friendly SQL Client

Easily connect to your local or remote database

Store your Database Connections in the library, connect over SSH tunnel, type and execute SQL commands directly in the app, and do everything you need to do without the necessity of opening the terminal.

Supported Databases:

  • SQLite
  • MySQL
  • MariaDB
  • PostgreSQL

Features Include:

  • Test Connections before saving them
  • View Table structure, content, and relations
  • Write multiple custom SQL Queries
  • Switch between light and dark mode
  • Handy keyboard shortcuts to quit (ctrl+q), create new connection (ctrl+shift+n), open a new window (ctrl+n)
@appid@
  • Fix translations are not loaded in Flatpak
  • Modernize the UI to fall in line with modern desktop environments
  • Update Flatpak platform runtime and modules
  • Update translations
Feature to sort tables alphabetically Build error in HeaderBar.vala: The name 'AccelLabel' does not exist in the context of 'Granite' Can't use ed25519 to connect through SSH RFE: port to gtksourceview-4 gnome40 EOL Authentication by public key failed when using Flatpak Development build uses the normal icon instead of the development one

Odin release

  • Update elementary OS Platform runtime.
  • Update screenshots.

Odin release

  • Updated translations for Ukranian, Russian, Indonisian, Chinese, Lithuanian, Portugese, Turkish, and Arabic.

New Features

  • Create, Edit, and Delete databases.
  • New context menu to copy and edit tables.
  • Support unencrypted connections.

Bug Fixes

  • Fix copy column data.

Translations

  • Updated translations for Ukranian, Russian, French, and German.

Reduced CPU usage by 2%.

Update translations for Italian, Spanish, Catalan, French, Hindi, Russian, and Turkish.

More fixes!

0.7.8 changelog

  • Fixed usage attempt of wrong Vala method.

0.7.7 changelog

  • Fix nasty GSettings bug causing the app to crash.
  • Implement GDA Placeholder statement.
  • Improve Query Tab iconography.

0.7.6 changelog

  • Fix ORDER BY in PostgreSQL Relationship view.
  • Improve MySQL structure view.
  • Drop Granite.Settings in favour of GLib.Settings.
  • Implement Granite.Notebook on the Query tab.
  • Show query error messages inline.

More fixes!

  • Fixed usage attempt of wrong Vala method.

Because 0.7.6 never happened!

  • Fix nasty GSettings bug causing the app to crash.
  • Implement GDA Placeholder statement.
  • Improve Query Tab iconography.

Query Tab Bonanza!

  • Fix ORDER BY in PostgreSQL Relationship view.
  • Improve MySQL structure view.
  • Drop Granite.Settings in favour of GLib.Settings.
  • Implement Granite.Notebook on the Query tab.
  • Show query error messages inline.

New features and improvements

  • You can now duplicate connections.
  • Sorting columns now works as expected by actually running the ORDER BY query.
  • Quickly jump to a specific result page with the handy dandy pagination popover.
  • Show Comment Column inside table structure view.

The 2020 release!

  • Manually reorder saved connection.
  • Allow selecting a custom SSH public key.
  • Fix SSH tunnel crashes.

Raw Query Improvements

  • Strip comments from SQL raw queries.
  • Better handle complex queries on multiple lines.
  • Speed up query rendering.

Sweet Query Tab Improvements

  • Edit font size of the Query Tab.
  • Edit background style of the Query Tab.
  • Save and remember the Query Tab size.

PostgreSQL Fixes

  • Fixed PostgreSQL relationship table.
  • Fixed wrong response message when handling non select queries.

Bite-Size fixes

  • Removed unused libfixposix.
  • Fixed pagination issue when clicking too fast while fetching big data.

Bug fixes and improvements

  • Rewritten pagination to use LIMIT and OFFSET.
  • Faster pagination and content viewing for big data.
  • Show records count in table's list.
  • Bug fixes and other improvements.

Bug fixes and improvements

  • Properly handle EXPLAIN SQL statement.
  • Properly handle querying capitlized PostgreSQL tables.
  • Improved async methods for internal views.
  • Updated translations.

Critical bug fix!

  • CRITICAL: Fixes missing GSettings Schema, restore lost connections.
  • Other small bug fixes and improvements.

Implemented SSH tunneling

  • WARNING: This release packs many updates and something could break. Please, backup your connections.
  • Connect via SSH to a remote Database.
  • Major code refactor to handle UI updates via async methods.
  • Use Stack container to show a loading Spinner during fetch or data processing methods.
  • Major performance improvements to the table search and dropdown schema switcher.
  • Bug fixes and other improvements.

Fancy New Icon!

  • New fancy Icon.
  • Use GtkNativeDialog.
  • Bug fixes and Improvements.

Open SQLite files

  • Open SQLite files directly in Sequeler.
  • Right click to copy data inside a column.
  • Bug fixes and Improvements.

UI Fixes and Performance Improvements

  • UI fix for logout button.
  • View shortcuts on preferences dropdown.
  • Performance Improvements.
  • Italian translation.

Export all the things!

  • Export results from Query Tab.
  • Export in CSV or Plain Text format.
  • Sort Columns order everywhere.
  • Brazilian translation.

Here comes the power of Pagination!!!

  • Paginate results in the Content tab.
  • Query messages UI improvements.
  • Relations table bug fixes.

We got Multi SQL Query support.

  • Ability to handle multiple SQL queries.
  • Execute the currently highlighted query.
  • Improved Library Popover UI.
  • Use native GTK+ CSS attributes for better Light/Dark mode.
  • Random UI improvements.

Urgent! Fixed broken Tabs for translated version.

Light and Dark Mode Switch!

  • Better Dark/Light mode switch in header bar.
  • Add Russian translation.
  • Updated Welcome screen with New Window command.
  • Code cleanup.

Official Juno release!

  • Missing filter name on SQLite File Dialog.

We got Search!

  • Search table names in sidebar.
  • Fixes issue in connecting directly on a non saved connection.
  • Updated Lithuanian translation.
  • Italian translation.

Improved Password Security.

  • Safely store passwords in LibSecret.
  • Auto upgrade on startup to remove passwords from GSettings.
  • Fixes issues with identical table names from other database in the same connection.
  • Alphabetically ordered tables.
  • Improvements in showing MySql/MariaDB Table Structure.
  • Many more bugs for you to discover.

New Icon and Import/Export Library.

  • Fancy new icon.
  • Import and Export connections library.
  • Fixed random crash when opening and closing multiple connections.
  • Bug fixes and improvements.

Bug fixes and improvements.

  • Fixed PostgreSQL Schema show options.
  • Fixed crash on new connection dialog when opening the connection before saving.

Little side dish update.

  • Fixed save window state on close.
  • Bug fixes and improvements.

Alternate coloured rows!

  • Manually reload Content, Structure, and Relations.
  • Show Table schema, content, and constraint relationships.
  • Properly handle compound queries.
  • Fix PostgreSQL table switch.

Complete rewrite of the entire code base!

  • Handle multiple Windows/Instances and multiple open connections.
  • Show Table schema, content, and constraint relationships.
  • Quicker response on big select queries
  • Better error handling.
  • Bug fixes and improvements.

Better error handling, less crashes!

  • The app doesn't crash when dealing with big values
  • Handling errors related to columns
  • Quicker response on big select queries
  • Some small clean up
  • Fixes issue with SQL Lite encrypted path

Better error handling, less crashes!

  • The app doesn't crash when dealing with big values
  • Handling errors related to columns
  • Quicker response on big select queries
  • Some small clean up

New Icon, Better error messages!

  • New shiny icon
  • View SQL error message on error
  • FIX: Show proper PostgreSql Schema Table in Sidebar
  • Snappiest query execution ever for local databases
  • The usual bundle of bugs for you to discover

Summoning the power of async methods!

  • All DataBase queries are now async methods, super fast.
  • The UI doesn't freeze anymore during a long process
  • Granite SourceList to display list of tables
  • Tabs to switch between the Query Builder and the Table Structure
  • ComboBox to select table schemas from the open connection
  • Many more bugs and issues for you to have fun with

Bug Fixes and Improvements

  • Display Table lists for SQLite and PostgreSQL
  • Refresh Table List view if tables change
  • Removed unused GSettings

This is so good you won't believe it. New Library UI, Schema Table, Custom Port, and more

  • A brand new Library View directly in your home screen, super tight and organized
  • Custom Port field for those snazzy geeks who don't just use 3306
  • A shiny new Sidebar View to list all your DataBase Tables
  • Code cleanup and speed improvements
  • Usual abundance of bugs and issues for you to have fun with!

Major Update: Releasing a sweet table to view Query Results!

  • Did I say we got a sweet table to view query results?
  • New shortcut (ctrl+enter) to execute query
  • Solved bug while connecting to DB directly from the Connection Dialog
  • UI Improvements to Connection Dialog
  • Added Spanish and Lithuanian translations

UI fixes

  • Visual improvements to the library view

Initial Release

  • Store your Database connections
  • Quickly connect to a Local or Remote Database
  • Write SQL queries in the built-in code editor
Database view https://raw.githubusercontent.com/ellie-commons/sequeler/v@version@/data/assets/screenshots/database-light.png Database view https://raw.githubusercontent.com/ellie-commons/sequeler/v@version@/data/assets/screenshots/database-dark.png New connection dialog https://raw.githubusercontent.com/ellie-commons/sequeler/v@version@/data/assets/screenshots/new-connection-light.png New connection dialog https://raw.githubusercontent.com/ellie-commons/sequeler/v@version@/data/assets/screenshots/new-connection-dark.png Alessandro Castellani @appid@.desktop @appid@ https://github.com/ellie-commons/sequeler https://www.paypal.me/alecaddd https://github.com/ellie-commons/sequeler/issues https://github.com/ellie-commons/sequeler/issues https://hosted.weblate.org/projects/sequeler castellani.ale@gmail.com #3f3f3f 25 pk_live_Arrxw947rfYpLQK7VcSv4766 HiDpiIcon HighContrast ModernToolkit
ellie-commons-sequeler-9963fb4/data/meson.build000066400000000000000000000071321512323162700215300ustar00rootroot00000000000000icons_dir = join_paths(get_option('datadir'), 'icons', 'hicolor') if get_option('sized-app-icon') icon_sizes = ['16', '24', '32', '48', '64', '128'] foreach size : icon_sizes asset = join_paths('assets', 'icons', '@0@x@0@'.format(size), '@0@.svg'.format(application_id)) install_data( asset, install_dir: join_paths(icons_dir, '@0@x@0@'.format(size), 'apps') ) install_data( asset, install_dir: join_paths(icons_dir, '@0@x@0@@2'.format(size), 'apps') ) endforeach else install_data( join_paths('assets', 'icons', '128x128', '@0@.svg'.format(application_id)), install_dir: join_paths(icons_dir , 'scalable', 'apps'), rename: '@0@.svg'.format(application_id) ) endif install_data( join_paths('assets', 'icons', 'status', 'table.svg'), install_dir: join_paths(icons_dir , '16x16', 'status'), ) install_data( join_paths('assets', 'icons', 'status', 'table-empty.svg'), install_dir: join_paths(icons_dir , '16x16', 'status'), ) install_data( join_paths('assets', 'icons', 'actions', 'office-database-new.svg'), install_dir: join_paths(icons_dir , '24x24', 'actions'), ) install_data( join_paths('assets', 'icons', 'actions', 'office-database-remove.svg'), install_dir: join_paths(icons_dir , '24x24', 'actions'), ) install_data( join_paths('assets', 'icons', 'actions', 'office-database-edit.svg'), install_dir: join_paths(icons_dir , '24x24', 'actions'), ) install_data( join_paths('assets', 'icons', 'actions', 'application-logout.svg'), install_dir: join_paths(icons_dir , '24x24', 'actions'), ) schema_path = '/io/github/ellie_commons/sequeler/' if get_option('profile') == 'development' schema_path += 'Devel/' endif schema_conf = configuration_data() schema_conf.set('appid', application_id) schema_conf.set('schema-path', schema_path) configure_file( input: '@0@.gschema.xml.in'.format(meson.project_name()), output: '@0@.gschema.xml'.format(application_id), install: true, install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas'), configuration: schema_conf ) # Install the Desktop file desktop_conf = configuration_data() desktop_conf.set('icon', application_id) desktop_conf.set('binary', application_id) desktop_file = i18n.merge_file( input: configure_file( input: '@0@.desktop.in.in'.format(meson.project_name()), output: '@0@.desktop.in'.format(application_id), configuration: desktop_conf ), output:'@0@.desktop'.format(application_id), po_dir: join_paths(meson.project_source_root(), 'po', 'extra'), type: 'desktop', install: true, install_dir: join_paths(get_option('datadir'), 'applications') ) # Validate desktop file desktop_file_validate = find_program('desktop-file-validate', required: false) if desktop_file_validate.found() test( 'validate-desktop', desktop_file_validate, args: [ desktop_file.full_path() ] ) endif # Install the MetaInfo file metainfo_conf = configuration_data() metainfo_conf.set('appid', application_id) metainfo_conf.set('version', meson.project_version()) metainfo_file = i18n.merge_file( input: configure_file( input: '@0@.metainfo.xml.in.in'.format(meson.project_name()), output: '@0@.metainfo.xml.in'.format(application_id), configuration: metainfo_conf ), output: '@0@.metainfo.xml'.format(application_id), po_dir: join_paths(meson.project_source_root(), 'po'), install: true, install_dir: join_paths(get_option('datadir'), 'metainfo') ) # Validate MetaInfo file appstream_util = find_program('appstream-util', required: false) if appstream_util.found() test( 'validate', appstream_util, args: [ 'validate-relax', metainfo_file.full_path() ] ) endif ellie-commons-sequeler-9963fb4/data/stylesheet.css000066400000000000000000000056231512323162700222740ustar00rootroot00000000000000.text-bold { font-weight: 600; } .library-box { background-color: transparent; } .library-box:selected .library-btn { background-color: transparent; } .library-box:selected .library-btn image { color: @fg_color; } .library-inner-box { background: transparent; transition: background 320ms ease; color: @fg_color; } .library-inner-box .library-btn { opacity: 0; } .library-inner-box:hover { background: shade (@bg_color, 0.9); } .library-inner-box:hover .library-btn { opacity: 1; } .library-btn:active, .library-btn:focus { background-color: transparent; } .grid-motion { background-color: alpha (#3689e6, 0.25); border-radius: 4px; } .library-titlebar { border-bottom: 1px solid shade (@bg_color, 0.9); background: shade (@bg_color, 0.95); } .library-toolbar { background: shade (@bg_color, 0.95); border-top: 1px solid shade (@bg_color, 0.9); } .library-colorbox { border-radius: 12px; box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.2); } .toolbar-btn { background: transparent; border: none; box-shadow: none; } .toolbar-btn.active { background: shade (@bg_color, 0.9); opacity: 1; } .headerbar-separator { margin-right: 3px; margin-left: 3px; } infobar.inline revealer > box { box-shadow: inset 0 -1px 0 0 alpha (#fff, 0.4); border-width: 1px; border-radius: 4px; } .color-button radio, .color-button radio:checked { border-color: alpha (#000, 0.3); box-shadow: inset 0 1px 0 0 alpha (@inset_dark_color, 0.7), inset 0 0 0 1px alpha (@inset_dark_color, 0.3), 0 1px 0 0 alpha (@bg_highlight_color, 0.3); padding: 10px; -gtk-icon-shadow: none; } .color-button radio:focus { border-color: @colorAccent; box-shadow: inset 0 1px 0 0 alpha (@inset_dark_color, 0.7), inset 0 0 0 1px alpha (@inset_dark_color, 0.3), inset 0 0 0 1px alpha (@bg_highlight_color, 0.05), 0 1px 0 0 alpha (@bg_highlight_color, 0.3), 0 0 0 1px alpha (@colorAccent, 0.25); } .color-dark radio { background: #252E32; border-color: #151B1C; color: #fff; } .color-light radio { background: #fdf6e3; color: #4d4d4d; } .color-white radio { background: #fff; color: #000; } .query-error { background-color: alpha (@STRAWBERRY_300, 0.2); border: 1px solid @STRAWBERRY_500; border-radius: 4px; } button.notebook-temp-fix image { color: @selected_fg_color; } .database-panel-overlay { background-color: alpha (#000, 0.3); } .database-panel { border-radius: 3px; border: 1px solid alpha (#000, 0.3); box-shadow: 0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12); text-shadow: none; background-color: shade (@base_color, 1.15); } .database-panel-bottom { background-color: alpha (#000, 0.1); box-shadow: inset 0 5px 5px -10px #000 } ellie-commons-sequeler-9963fb4/io.github.ellie_commons.sequeler.yml000066400000000000000000000137741512323162700255510ustar00rootroot00000000000000id: io.github.ellie_commons.sequeler runtime: io.elementary.Platform runtime-version: '8.2' sdk: io.elementary.Sdk command: io.github.ellie_commons.sequeler finish-args: - --share=ipc - --socket=fallback-x11 - --socket=wayland - --share=network - --socket=ssh-auth cleanup: - /include - /lib/pkgconfig - /share/vala - /man - '*.a' - '*.la' build-options: libdir: /app/lib modules: - name: gtksourceview buildsystem: meson build-options: config-opts: - -Dgtk_doc=false sources: - type: archive url: https://download.gnome.org/sources/gtksourceview/4.8/gtksourceview-4.8.4.tar.xz sha256: 7ec9d18fb283d1f84a3a3eff3b7a72b09a10c9c006597b3fbabbb5958420a87d x-checker-data: type: gnome name: gtksourceview versions: <: '4.99' - name: libgda build-options: config-opts: - --with-java=no - --with-jni=no - --with-oracle=no - --disable-gdaui-gi cflags: -Wno-error=incompatible-pointer-types -Wno-error=implicit-function-declaration sources: - type: archive url: https://download.gnome.org/sources/libgda/5.2/libgda-5.2.9.tar.xz sha256: 59caed8ca72b1ac6437c9844f0677f8a296d52cfd1c0049116026abfb1d87d9b x-checker-data: type: gnome name: libgda versions: <: 5.2.10 - type: patch path: build-aux/0001-Explicit-parameters-in-function-declaration.patch modules: - name: postgresql-libs build-options: config-opts: - --with-python=no - --with-perl=no - --with-libxml - --with-openssl sources: - type: archive url: https://ftp.postgresql.org/pub/source/v18.1/postgresql-18.1.tar.gz sha256: b0f18c2d6973d2aa023cfc77feda787d7bbe9c31a3977d0f04ac29885fb98ec4 x-checker-data: type: anitya project-id: 381406 url-template: https://ftp.postgresql.org/pub/source/v$version/postgresql-$version.tar.gz - name: jemalloc cleanup: - /bin/ - /share sources: - type: archive url: https://github.com/jemalloc/jemalloc/releases/download/5.3.0/jemalloc-5.3.0.tar.bz2 sha256: 2db82d1e7119df3e71b7640219b6dfe84789bc0537983c3b7ac4f7189aecfeaa x-checker-data: type: json url: https://api.github.com/repos/jemalloc/jemalloc/releases/latest version-query: .tag_name url-query: .assets[] | select(.name=="jemalloc-" + $version + ".tar.bz2") | .browser_download_url - name: libaio buildsystem: simple build-options: arch: i386: cflags: -march=x86-64 -mtune=generic -O2 -pipe -fno-stack-protector -fno-plt build-commands: - make - make prefix=/app install sources: - type: archive url: http://deb.debian.org/debian/pool/main/liba/libaio/libaio_0.3.113.orig.tar.gz sha256: 2c44d1c5fd0d43752287c9ae1eb9c023f04ef848ea8d4aafa46e9aedb678200b x-checker-data: type: html url: https://packages.debian.org/source/sid/libaio pattern:
is-main-source: true - name: libfmt buildsystem: cmake-ninja sources: - type: git url: https://github.com/fmtlib/fmt.git tag: 12.1.0 commit: 407c905e45ad75fc29bf0f9bb7c5c2fd3475976f x-checker-data: type: git tag-pattern: ^([\d.]+)$ - name: mariadb buildsystem: cmake-ninja config-opts: - -DCMAKE_BUILD_TYPE=Release - -DBUILD_CONFIG=mysql_release - -DWITH_INNOBASE_STORAGE_ENGINE=1 - -DWITH_PCRE=system - -DWITH_LIBFMT=system - -DWITH_SBOM=0 - -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 - -DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1 - -DWITHOUT_PARTITION_STORAGE_ENGINE=1 - -DWITHOUT_TOKUDB=1 - -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 - -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 - -DWITHOUT_PBXT_STORAGE_ENGINE=1 - -DWITHOUT_SERVER=ON - -DPLUGIN_AUTH_PAM=NO cleanup: - /bin/ sources: - type: git url: https://github.com/MariaDB/server.git tag: mariadb-12.2.1 commit: 144dead8826f4a84008a76ef7fcc44e816f92930 x-checker-data: type: git tag-pattern: ^mariadb-([\d.]+)$ - name: intltool cleanup: - '*' sources: - type: archive url: https://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz sha256: 67c74d94196b153b774ab9f89b2fa6c6ba79352407037c8c14d5aeb334e959cd - name: libssh2 sources: - type: archive url: https://www.libssh2.org/download/libssh2-1.11.1.tar.gz sha256: d9ec76cbe34db98eec3539fe2c899d26b0c837cb3eb466a56b0f109cabf658f7 x-checker-data: type: anitya project-id: 1730 url-template: https://www.libssh2.org/download/libssh2-$version.tar.gz - name: libfiposix sources: - type: archive url: https://github.com/sionescu/libfixposix/archive/v0.5.1.tar.gz sha256: 5d9d3d321d4c7302040389c43f966a70d180abb58d1d7df370f39e0d402d50d4 x-checker-data: type: json url: https://api.github.com/repos/sionescu/libfixposix/releases/latest version-query: .tag_name | sub("^v"; "") url-query: '"https://github.com/sionescu/libfixposix/archive/" + .tag_name + ".tar.gz"' timestamp-query: .published_at - type: script dest-filename: autogen.sh commands: - autoreconf -vfi - name: sequeler buildsystem: meson sources: - type: dir path: . ellie-commons-sequeler-9963fb4/meson.build000066400000000000000000000025331512323162700206170ustar00rootroot00000000000000# project name and programming language project('io.github.ellie_commons.sequeler', 'vala', 'c', version: '0.9.0', meson_version: '>= 0.59.0') cc = meson.get_compiler('c') m_dep = cc.find_library('m', required: true) vala_args = ['--pkg', 'posix'] add_project_arguments( ['--vapidir', join_paths(meson.current_source_dir(), 'vapi')], language: 'vala' ) if get_option('profile') == 'development' application_id = '@0@.Devel'.format(meson.project_name()) vala_args += ['-D', 'IS_DEVEL'] else application_id = meson.project_name() endif linux_dep = meson.get_compiler('vala').find_library('linux') # Include the translations module i18n = import('i18n') # Include the gnome module gnome = import('gnome') asresources = gnome.compile_resources( 'as-resources', 'data/assets.gresource.xml', source_dir: 'data', c_name: 'as' ) # Set our translation domain add_global_arguments('-DGETTEXT_PACKAGE="@0@"'.format (meson.project_name()), language: 'c') vala_lint = find_program('io.elementary.vala-lint', required : false) if vala_lint.found() test ( 'Vala lint', vala_lint, args: ['-d', join_paths(meson.project_source_root(), 'src')] ) endif subdir('src') subdir('data') subdir('po') gnome.post_install( glib_compile_schemas: true, gtk_update_icon_cache: true, update_desktop_database: true ) ellie-commons-sequeler-9963fb4/meson_options.txt000066400000000000000000000003331512323162700221060ustar00rootroot00000000000000option( 'profile', type: 'combo', choices: [ 'default', 'development' ], value: 'default' ) option('sized-app-icon', type: 'boolean', value: true) ellie-commons-sequeler-9963fb4/po/000077500000000000000000000000001512323162700170705ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/po/LINGUAS000066400000000000000000000001221512323162700201100ustar00rootroot00000000000000ca de es fr id it lg lt pt_BR ru tr ja zh_CN ar_EG pt uk cs zh_TW ars pl hi ta et ellie-commons-sequeler-9963fb4/po/POTFILES000066400000000000000000000013551512323162700202440ustar00rootroot00000000000000src/Main.vala src/Application.vala src/Window.vala src/Layouts/HeaderBar.vala src/Layouts/Main.vala src/Layouts/Library.vala src/Layouts/Welcome.vala src/Layouts/DataBaseSchema.vala src/Layouts/DataBaseView.vala src/Layouts/Views/Structure.vala src/Layouts/Views/Content.vala src/Layouts/Views/Relations.vala src/Layouts/Views/Query.vala src/Partials/ButtonType.vala src/Partials/Helpers.vala src/Partials/LibraryItem.vala src/Partials/TreeBuilder.vala src/Services/Settings.vala src/Services/ActionManager.vala src/Services/DataManager.vala src/Services/ConnectionManager.vala src/Services/Types/DataBaseType.vala src/Services/Types/MySQL.vala src/Services/Types/PostgreSQL.vala src/Services/Types/SQLite.vala src/Widgets/ConnectionDialog.vala ellie-commons-sequeler-9963fb4/po/ar_EG.po000066400000000000000000000421311512323162700204060ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-09-18 06:01+0000\n" "Last-Translator: ناصر مصطÙÙ‰ \n" "Language-Team: Arabic (Egypt) \n" "Language: ar_EG\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "X-Generator: Weblate 5.14-dev\n" #: src/Application.vala:67 #, fuzzy msgid "Directories are not supported" msgstr "الدلائل غير مدعومة" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "لا أعر٠ما يجب القيام به" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "شئ غير متوقع قد حدث" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "خروج" #: src/Layouts/HeaderBar.vala:56 msgid "Create a new database" msgstr "إنشاء قاعدة بيانات جديدة" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- حدد قاعدة البيانات -" #: src/Layouts/HeaderBar.vala:74 msgid "Database properties" msgstr "نوع قاعدة البيانات" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Ù†Ø§ÙØ°Ø© جديدة" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "اتصال جديد" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "انهاء" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "القائمة" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "متصل ب %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "اتصالات محÙوظة" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "مسح الكل" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "اعادة تحميل المكتبه" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "تصدير المكتبة" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "هل انت متأكد انك تريد المتابعة؟" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "بحذ٠هذا الاتصال ØŒ لن تتمكن من استعادة هذه البيانات." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "نعم ØŒ احذÙ!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "سيتم حذ٠جميع البيانات ولن تتمكن من استعادتها." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "نعم ØŒ احذ٠الكل!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "مطلوب اسم مستخدم من أجل الاتصال!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "اختر ملÙًا" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Ø­ÙØ¸" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_إلغاء" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "غير قادر على الاتصال ب %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "" "غير قادر على تصدير المكتبة\n" "· " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "مرحبا بكم ÙÙŠ Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "اتصل بأي قاعدة بيانات محلية أو بعيدة." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Ø¥Ø¶Ø§ÙØ© قاعدة بيانات جديدة" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "اتصل بقاعدة بيانات ÙˆØ§Ø­ÙØ¸Ù‡Ø§ ÙÙŠ مكتبتك" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Ø§ÙØªØ­ Ù†Ø§ÙØ°Ø© جديدة لاحقة" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "اتصالات الاستيراد" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "استيراد اتصالات التي تم تصديرها مسبقًا" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "حدد ملÙ" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Ø§ÙØªØ­" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "تعذر استيراد المكتبة " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "جداول البحث" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "جداول البحث…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "إعادة تحميل الجداول" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "أض٠الجدول" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- حدد قاعدة البيانات -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "الجداول" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "بناء" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "المحتوى" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "علاقات" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "استعلام" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "تصغير" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "تكبير 1: 1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "تكبير" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "تباين عالي" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "ضوء شمسي" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "الظلام الشمسي" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "تغيير نمط النص" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "إنشاء علامة تبويب استعلام جديدة" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "استعلام %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "حدد الجدول" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "حدد جدولاً من الشريط الجانبي الأيسر لتنشيط هذا العرض." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "لا توجد نتائج متاحة" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "إعادة تحميل النتائج" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " مجالات" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Ø§Ù„ØµÙØ­Ø© السابقة" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Ø§Ù„ØµÙØ­Ø© التالية" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d ØµÙØ­Ø§Øª" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "انتقال إلى Ø§Ù„ØµÙØ­Ø© …" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 ØµÙØ­Ø©" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d من %d ØµÙØ­Ø§Øª" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d إدخالات" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " القيود" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "الاستعلام قيد التشغيل …" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "نتائج التصدير" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "تصدير كمل٠CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "تصدير كنص" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "غير قادر على معالجة الاستعلام!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d إجمالي النتائج" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "تم تنÙيذ الاستعلام بنجاح! الصÙو٠المتأثرة: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "تم تنÙيذ الاستعلام!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "قم بتشغيل الاستعلام" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "الاتصال" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "تحرير الاتصال" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "اتصال مكرر" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "حذ٠الاتصال" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "خيارات" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "خطأ" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "ÙÙŠ العمود" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "نسخ %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (نسخة)" #: src/Services/ActionManager.vala:254 msgid "Are you sure you want to delete this Database?" msgstr "هل أنت متأكد من أنك تريد حذ٠قاعدة البيانات هذه؟" #: src/Services/ActionManager.vala:254 msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "سيتم حذ٠جميع البيانات ولن تتمكن من استعادتها" #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "(%d) ÙØ´Ù„ تهيئة Libssh2" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "ÙØ´Ù„ ÙÙŠ ÙØªØ­ المقبس" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "ÙØ´Ù„ الاتصال!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "خطأ عند بدء جلسة SSH :%d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "ÙØ´Ù„ت المصادقة بكلمة المرور!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "ÙØ´Ù„ت المصادقة Ø¨Ø§Ù„Ù…ÙØªØ§Ø­ العام!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "لم يتم العثور على طرق مصادقة مدعومة!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "ÙØ´Ù„ ÙÙŠ ÙØªØ­ مأخذ توصيل الاستماع" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "ÙØ´Ù„ الربط. قد يكون Ù…Ù†ÙØ° قاعدة البيانات الخاص بك خاطئًا!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "ÙØ´Ù„ ÙÙŠ الاستماع!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "ÙØ´Ù„ قبول الاتصال عن بعد!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "تعذر ÙØªØ­ قناة Direct-tcpip! (لاحظ أن هذا يمكن أن يكون مشكلة ÙÙŠ الخادم! يرجى " "مراجعة سجلات الخادم.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "خطأ!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "مل٠SSH Key Ù…Ùقود!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "Ù…ÙØªØ§Ø­ SSH العمومي Ù…Ùقود!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "الإتصال" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "حدد لون الاتصال" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "اسم الاتصال:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "اسم الاتصالات" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "نوع قاعدة البيانات:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "مضيÙ:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "اسم قاعدة البيانات:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "اسم المستخدم:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "كلمه السر:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "عرض كلمة المرور" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Ø§Ø®ÙØ§Ø¡ كلمة المرور" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "ميناء:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "استخدم SSL:" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "مسار الملÙ:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "حدد مل٠SQLite الخاص بك …" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "الاتصال عبر Ù†ÙÙ‚ SSH:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "مضي٠SSH:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "اسم مستخدم SSH:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "كلمة مرور SSH:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "Ù…Ù†ÙØ° SSH:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "اختياري" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "هوية SSH" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "حدد مل٠هويتك …" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "Ù…ÙØªØ§Ø­ SSH العمومي Ù…Ùقود!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "حدد مل٠SQLite الخاص بك …" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "توليد Ù…ÙØªØ§Ø­ SSH" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "Ù†ÙÙ‚ SSH" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "أغلق" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Ø­ÙØ¸ الاتصال" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "اختبار الاتصال" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Ø¬Ø§Ø±Ù ÙØªØ­ Ù†ÙÙ‚ SSH …" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "جار٠اختبار الاتصال …" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "تم الاتصال بنجاح!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "Ø¬Ø§Ø±Ù Ø­ÙØ¸ الاتصال …" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "تم Ø­ÙØ¸ الاتصال!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "توصيل…" #~ msgid "Light background" #~ msgstr "خلÙية مضيئة" #~ msgid "Dark background" #~ msgstr "خلÙية داكنة" ellie-commons-sequeler-9963fb4/po/ars.po000066400000000000000000000421131512323162700202160ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2021-11-08 01:50+0000\n" "Last-Translator: Abdulrahman â˜•ï¸ \n" "Language-Team: Arabic (Najdi) \n" "Language: ars\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? " "2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= " "99) ? 4 : 5))));\n" "X-Generator: Weblate 4.9-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "المجلدات غير مدعومة" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "ما أدري وش أسوي" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "صار شيء غير متوقع أبداً" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "خروج" #: src/Layouts/HeaderBar.vala:56 #, fuzzy #| msgid "Create a new Query Tab" msgid "Create a new database" msgstr "سوي مبوبة استعلام جديدة" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- حدد قاعدة -" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "نوع القاعدة:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Ù†Ø§ÙØ°Ø© جديدة" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "اتصال جديد" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "إنهاء" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "القائمة" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "متصل %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "اتصالات مخزنة" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "حذ٠الكل" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "اعادة تحميل المكتبة" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "تصدير المكتبة" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "متأكد أنك ودك تكمل؟" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "ترا لما تحذ٠هالاتصال ماراح تقدر ترجع بياناته." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "ايه، احذÙ!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "كل البيانات راح تنحذ٠وماراح تقدر ترجعها." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "ايه، احذ٠كل شي!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "اسم المستخدم مطلوب عشان تقدر تتصل!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "اختر ملÙ" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Ø­ÙØ¸" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_الغاء" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "موب قادر يتصل ب %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "موب قادر يصدر المكنبة " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "حياك بتطبيق Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "اتصل بأي قاعدة محلية أو خارجية." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "سوي قاعدة جديدة" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "اتصل بقاعدة وخزنها بمكتبتك" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Ø§ÙØªØ­ Ù†Ø§ÙØ°Ø© Sequeler جديدة" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "استورد اتصالات" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "استورد اتصالات قد صدرتها قبل" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "حدد ملÙ" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Ø§ÙØªØ­" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "موب قادر يستورد مكتبة " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "ابحث بالجداول" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "ابحث بالجداول…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "اعادة تحميل الجداول" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "اض٠جدول" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- حدد قاعدة -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "جداول" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "البنية" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "المحتوى" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "العلاقات" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "الاستعلام" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "سوي تصغير" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "خلي العرض طبيعي" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "سوي تكبير" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "سطوع عالي" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "شمسي ÙØ§ØªØ­" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "شمسي غامق" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "غير شكل الكتابة" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "سوي مبوبة استعلام جديدة" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "استعلام %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "حدد جدول" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "جدد جدول من الجنب اليسار عشان ØªÙØ¹Ù„ العرض هذا." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "ماÙÙŠ أي نتايج Ù…ØªÙˆÙØ±Ø©" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "اعادة تحميل النتايج" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " حقول" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Ø§Ù„ØµÙØ­Ø© اللي قبل" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Ø§Ù„ØµÙØ­Ø© اللي بعده" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d ØµÙØ­Ø§Øª" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "انقز Ù„ØµÙØ­Ø©â€¦" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "ØµÙØ­Ø© وحدة" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d من اصل %d ØµÙØ­Ø§Øª" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d ادخالات" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " قيود" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "استعلام جالس يشتغل…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "صدر النتايج" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "صدر بصيغة CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "صدر بصيغة نصية" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "موب قادر يشغل الاستعلام!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d اجمالي النتايج" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "الاستعلام ØªÙ†ÙØ° بشكل ممتاز! الصÙو٠اللي تأثرت: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "الاستعلام ØªÙ†ÙØ°!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "شغل استعلام" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "اتصل" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "عدل اتصال" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "سوي اتصال مكرر من هذا" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "احذ٠الاتصال" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "خيارات" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "خطأ" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "على العمود" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "انسخ %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (نسخة)" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "Are you sure you want to proceed?" msgid "Are you sure you want to delete this Database?" msgstr "متأكد أنك ودك تكمل؟" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "All the data will be deleted and you won’t be able to recover it." msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "كل البيانات راح تنحذ٠وماراح تقدر ترجعها." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "ÙØ´Ù„ تشغيل Libssh2 (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Ù…Ù†ÙØ° السوكيت ÙØ´Ù„ ÙØªØ­Ù‡" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "ÙØ´Ù„ الاتصال!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "لما نحاول نبدأ جلسة SSH يطلع خطأ: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "عملية التحقق عن طريقة كلمة المرور ÙØ´Ù„ت!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "عملية التحقق عن طريق الببلك كي ÙØ´Ù„ت!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "مالقينا طرق تحقق مدعومة!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "ÙØªØ­ Ù…Ù†ÙØ° سوكيت للاستماع (listen socket ) ÙØ´Ù„ت" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "الارتباط ÙØ´Ù„! يمكن Ø§Ù„Ù…Ù†ÙØ° حق القاعدة غلط!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "ÙØ´Ù„ بالاستماع!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "المواÙقة على اتصال خارجي ÙØ´Ù„ت!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "ماقدرنا Ù†ÙØªØ­ قناة direct-tcpip! (ترا يمكن هذي مشكلة بالخادم Ù†ÙØ³Ù‡! راجع لوقات " "Ø§Ù„Ø³ÙŠØ±ÙØ± وشوÙ)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "خطأ!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "مالقينا مل٠SSH Key!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "مالقينا SSH public key!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "اتصال" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "حدد لون للاتصال" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "اسم الاتصال:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "اسم الاتصال" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "نوع القاعدة:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "المستضيÙ:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "اسم القاعدة:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "اسم المستخدم:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "كلمة المرور:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "اعرض كلمة المرور" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "خبي كلمة المرور" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Ø§Ù„Ù…Ù†ÙØ°:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "مسار الملÙ:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "حدد المل٠حق قاعدة SQLite…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "اتصال عن طريق SSH Tunnel:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "مستضي٠SSH:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "اسم مستخدم SSH:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "كلمة مرور SSH:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "Ù…Ù†ÙØ° SSH:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "اختياري" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "هوية SSH (Identity)" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "حدد مل٠الهوية (Identity)…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "مالقينا SSH public key!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "حدد المل٠حق قاعدة SQLite…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "سوي Ù…ÙØªØ§Ø­ SSH" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "قناة SSH (Tunnel)" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "اغلاق" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "خزن الاتصال" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "جرب الاتصال" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "جالس ÙŠÙØªØ­ قناة SSH (Tunnel)…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "جالس يجرب الاتصال…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "اتصل بشكل مضبوط!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "جالس يخزن الاتصال…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "الاتصال تخزن!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "جالس يتصل…" #~ msgid "Light background" #~ msgstr "خلÙية ÙØ§ØªØ­Ø©" #~ msgid "Dark background" #~ msgstr "خلÙية غامقة" ellie-commons-sequeler-9963fb4/po/ca.po000066400000000000000000000425021512323162700200160ustar00rootroot00000000000000# Catalan translations for io.github.ellie_commons.sequeler package. # Copyright (C) 2020 THE io.github.ellie_commons.sequeler'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # Adolfo Jayme Barrientos , 2020. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-09-30 22:01+0000\n" "Last-Translator: Ricard Rodríguez \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.14-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "No s’admeten els directoris" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "No se sap què fer" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "S’ha produït una situació inesperada" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Finalitza la sessió" #: src/Layouts/HeaderBar.vala:56 #, fuzzy #| msgid "Create a new Query Tab" msgid "Create a new database" msgstr "Crea una pestanya de consulta" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- Seleccioneu una base de dades -" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "Tipus de base de dades:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Finestra nova" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Connexió nova" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Surt" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Menú" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Connectat a %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "CONNEXIONS DESADES" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Suprimeix-ho tot" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Torna a carregar la biblioteca" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Exporta la biblioteca" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Segur que voleu continuar?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "" "Si suprimiu aquesta connexió, no sereu capaç de recuperar-ne les dades." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Sí, suprimeix-la" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "Se suprimiran totes les dades i no sereu capaç de recuperar-les." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Sí, suprimeix-ho tot" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "Cal un nom d’usuari per a establir la connexió." #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Trieu un fitxer" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Desa" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_Cancel·la" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "No es pot connectar a %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "No es pot exportar la biblioteca " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Us donem la benvinguda al Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "Connecteu-vos a qualsevol base de dades local o remota." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Afegeix una base de dades nova" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "Connecta a una base de dades i desa-la a la biblioteca" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Obre una finestra nova del Sequeler" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Importa connexions" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Importa connexions del Sequeler prèviament exportades" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Seleccioneu un fitxer" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Obre" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "No es pot importar la biblioteca " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Cerca a les taules" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Cerca a les taules…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Torna a carregar les taules" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Afegeix una taula" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Seleccioneu una base de dades -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "TAULES" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Estructura" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "Contingut" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "Relacions" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Consulta" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Allunya" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "Ajusta 1:1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Acosta" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Contrast alt" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Solarized clar" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Solarized fosc" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Canvia l’estil del text" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Crea una pestanya de consulta" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Consulta %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Seleccioneu una taula" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "" "Seleccioneu una taula de la barra lateral esquerra per a activar aquesta " "vista." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "No hi ha cap resultat disponible" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Torna a carregar els resultats" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " camps" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Pàgina anterior" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Pàgina següent" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d pàgines" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Bota a la pàgina…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 pàgina" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d de %d pàgines" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d entrades" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " restriccions" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "S’està executant la consulta…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Exporta els resultats" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "Exporta com a CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Exporta com a text" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "No es pot processar la consulta." #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d resultats en total" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "S’ha executat la consulta correctament. Files afectades: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "S’ha executat la consulta." #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Executa la consulta" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "Connecta" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Edita la connexió" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Duplica la connexió" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Suprimeix la connexió" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Opcions" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Error" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "a la columna" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Copia %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (còpia)" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "Are you sure you want to proceed?" msgid "Are you sure you want to delete this Database?" msgstr "Segur que voleu continuar?" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "All the data will be deleted and you won’t be able to recover it." msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "Se suprimiran totes les dades i no sereu capaç de recuperar-les." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Ha fallat la inicialització del libssh2 (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Ha fallat l’obertura del sòcol" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "Ha fallat la connexió." #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "S’ha produït un error en iniciar la sessió SSH: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "Ha fallat l’autenticació per contrasenya." #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "Ha fallat l’autenticació per clau pública." #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "No s’ha trobat cap mètode d’autenticació admès." #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "No s’ha pogut obrir el sòcol d’escolta" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "No s’ha pogut vincular. Potser el port de la base de dades és erroni." #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "No s’ha pogut escoltar." #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "No s’ha pogut acceptar la connexió remota." #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "No s’ha pogut obrir el canal direct-tcpip (observeu que això pot ser un " "problema del servidor; reviseu-ne els registres)." #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "S’ha produït un error" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "Manca el fitxer de la clau SSH." #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "Manca la clau pública SSH." #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "Connexió" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Seleccioneu el color de la connexió" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Nom de la connexió:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Nom de la connexió" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Tipus de base de dades:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Amfitrió:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Nom de la base de dades:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Nom d’usuari:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Contrasenya:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Mostra la contrasenya" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Amaga la contrasenya" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Port:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "Utilitzeu SSL:" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Camí del fitxer:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Seleccioneu el vostre fitxer SQLite…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "Connecta mitjançant un túnel SSH:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "Amfitrió SSH:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "Nom d’usuari SSH:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "Contrasenya SSH:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "Port SSH:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Opcional" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "Identitat SSH" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Seleccioneu el vostre fitxer d’identitat…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "Manca la clau pública SSH." #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "Seleccioneu el vostre fitxer SQLite…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Genera una clau SSH" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "Túnel SSH" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Tanca" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Desa la connexió" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Prova la connexió" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "S’està obrint el túnel SSH…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "S’està provant la connexió…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "S’ha establert la connexió." #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "S’està desant la connexió…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "S’ha desat la connexió." #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "S’està connectant…" #~ msgid "Light background" #~ msgstr "Fons clar" #~ msgid "Dark background" #~ msgstr "Fons fosc" #, fuzzy #~ msgid "Easily connect to your local or remote database" #~ msgstr "Connecteu-vos a qualsevol base de dades local o remota." #, fuzzy #~ msgid "Test Connections before saving them" #~ msgstr "Prova la connexió" #, fuzzy #~ msgid "Connect via SSH to a remote Database." #~ msgstr "Connecteu-vos a qualsevol base de dades local o remota." #, fuzzy #~ msgid "Export all the things!" #~ msgstr "Exporta com a text" #, fuzzy #~ msgid "New Icon and Import/Export Library." #~ msgstr "No es pot importar la biblioteca " #, fuzzy #~ msgid "Import and Export connections library." #~ msgstr "Importa connexions" #, fuzzy #~ msgid "Quickly connect to a Local or Remote Database" #~ msgstr "Connecteu-vos a qualsevol base de dades local o remota." #, fuzzy #~ msgid "Save Quick Connections" #~ msgstr "Desa la connexió" #, fuzzy #~ msgid "Light Mode" #~ msgstr "Fons clar" #~ msgid " of " #~ msgstr "/" ellie-commons-sequeler-9963fb4/po/cs.po000066400000000000000000000400121512323162700200320ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2021-09-02 12:32+0000\n" "Last-Translator: VojtÄ›ch Perník \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Weblate 4.8.1-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Adresáře nejsou podporovány" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Nevím, co dÄ›lat" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Stalo se nÄ›co zcela neoÄekávaného" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Odhlásit se" #: src/Layouts/HeaderBar.vala:56 #, fuzzy #| msgid "Create a new Query Tab" msgid "Create a new database" msgstr "VytvoÅ™it nový panel dotazu" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- Vyberte databázi -" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "Typ databáze:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Nové okno" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Nové pÅ™ipojení" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "UkonÄit" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Menu" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "PÅ™ipojeno k %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "ULOŽENà PŘIPOJENÃ" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Smazat vÅ¡e" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Znovu naÄíst knihovnu" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Exportovat knihovnu" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Opravdu chcete pokraÄovat?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "OdstranÄ›ním tohoto pÅ™ipojení nebudete moci tato data obnovit." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Ano, smazat!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "VÅ¡echna data budou smazána a nebudete je moci obnovit." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Ano, smazat vÅ¡e!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "K pÅ™ipojení je vyžadováno uživatelské jméno!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Vybrat soubor" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Uložit" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_ZruÅ¡it" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "Nelze se pÅ™ipojit k %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Nelze exportovat knihovnu " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Vítejte v Sequeleru" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "PÅ™ipojte se k jakékoli místní nebo vzdálené databázi." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "PÅ™idat novou databázi" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "PÅ™ipojit k databázi a uložit ji do knihovny" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Otevřít nové okno Sequeleru" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Importovat pÅ™ipojení" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Importovat dříve exportovaná pÅ™ipojení Sequeleru" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Vybrat soubor" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Otevřít" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Nelze importovat knihovnu " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Prohledat tabulky" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Prohledat tabulky…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Znovu naÄíst tabulky" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "PÅ™idat tabulku" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Vyberte databázi -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "TABULKY" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Struktura" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "PÅ™ipojit" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "Relace" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Dotaz" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Oddálit" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "Zobrazení v měřítku 1:1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "PÅ™iblížit" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Vysoký kontrast" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Solarized Light" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Solarized Dark" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "ZmÄ›nit styl textu" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "VytvoÅ™it nový panel dotazu" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Dotaz %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Vybrat tabulku" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "Toto zobrazení aktivujete výbÄ›rem tabulky z levého postranního panelu." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Nejsou k dispozici žádné výsledky" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Znovu naÄíst výsledky" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " polí" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "PÅ™edchozí stránka" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Další stránka" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d stránek" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "PÅ™ejít na stránku…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 stránka" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d z %d stránek" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d záznamů" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " omezení" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Probíhá dotaz…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Exportovat výsledky" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "Exportovat jako CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Exportovat jako text" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Dotaz nelze zpracovat!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d celkových výsledků" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Dotaz úspěšnÄ› dokonÄen! OvlivnÄ›né řádky: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Dotaz dokonÄen!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Spustit dotaz" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "PÅ™ipojit" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Upravit pÅ™ipojení" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Duplikovat pÅ™ipojení" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Smazat pÅ™ipojení" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Možnosti" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Chyba" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "na sloupci" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Kopírovat %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (kopie)" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "Are you sure you want to proceed?" msgid "Are you sure you want to delete this Database?" msgstr "Opravdu chcete pokraÄovat?" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "All the data will be deleted and you won’t be able to recover it." msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "VÅ¡echna data budou smazána a nebudete je moci obnovit." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Selhala inicializace Libssh2 (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "NepodaÅ™ilo se otevřít socket" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "NepodaÅ™ilo se pÅ™ipojit!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "Chyba pÅ™i spuÅ¡tÄ›ní relace SSH: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "PÅ™ihlášení heslem se nezdaÅ™ilo!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "PÅ™ihlášení pomocí veÅ™ejného klíÄe se nezdaÅ™ilo!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Nebyly nalezeny žádné podporované metody pÅ™ihlášení!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "NepodaÅ™ilo se otevřít socket pro poslech" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "PÅ™ipojení se nezdaÅ™ilo. Zadaný databázový port může být nesprávný!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "NepodaÅ™ilo se poslouchat!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Autorizace vzdáleného pÅ™ipojení se nezdaÅ™ila!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "Nelze otevřít kanál direct-tcpip! (To může být také problém serveru! " "Zkontrolujte logy serveru.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Chyba!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "Chybí soubor klíÄe SSH!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "Chybí veÅ™ejný klÃ­Ä SSH!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "PÅ™ipojení" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Vyberte barvu pÅ™ipojení" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Název pÅ™ipojení:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Název pÅ™ipojení" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Typ databáze:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Hostitel:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Jméno databáze:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Uživatelské jméno:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Heslo:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Zobrazit heslo" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Skrýt heslo" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Port:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Cesta k souboru:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Vyberte soubor SQLite…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "PÅ™ipojit pÅ™es tunel SSH:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "Hostitel SSH:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "Uživatelské jméno SSH:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "Heslo SSH:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "Port SSH:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Volitelné" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "Identita SSH" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Vyberte soubor identity…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "Chybí veÅ™ejný klÃ­Ä SSH!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "Vyberte soubor SQLite…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Vygenerovat klÃ­Ä SSH" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "Tunel SSH" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Zavřít" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Uložit pÅ™ipojení" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Otestovat pÅ™ipojení" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Otevírá se tunel SSH…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "Testuje se pÅ™ipojení…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "ÚspěšnÄ› pÅ™ipojeno!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "Ukládá se pÅ™ipojení…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "PÅ™ipojení uloženo!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "PÅ™ipojování…" #~ msgid "Light background" #~ msgstr "SvÄ›tlé pozadí" #~ msgid "Dark background" #~ msgstr "Tmavé pozadí" ellie-commons-sequeler-9963fb4/po/de.po000066400000000000000000000405471512323162700200320ustar00rootroot00000000000000# German translations for io.github.ellie_commons.sequeler package. # Copyright (C) 2020 THE io.github.ellie_commons.sequeler'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # Peter Nerlich , 2020. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-12-25 11:37+0000\n" "Last-Translator: Ettore Atalan \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.15.1\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Verzeichnisse werden nicht unterstützt" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Ich weiß nicht, was ich tun soll" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Es ist ein unerwartetes Problem aufgetreten" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Abmelden" #: src/Layouts/HeaderBar.vala:56 msgid "Create a new database" msgstr "Neue Datenbank erstellen" #: src/Layouts/HeaderBar.vala:65 msgid "Delete database" msgstr "Datenbank löschen" #: src/Layouts/HeaderBar.vala:74 msgid "Database properties" msgstr "Datenbankeigenschaften" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Neues Fenster" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Neue Verbindung" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Beenden" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Menü" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Verbunden mit %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "GESPEICHERTE VERBINDUNGEN" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Alle Verbindungen löschen" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Bibliothek erneut laden" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Bibliothek exportieren" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Sind Sie sicher, dass Sie fortfahren wollen?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "" "Wenn Sie diese Verbindung löschen, können die Zugangsdaten nicht " "wiederhergestellt werden." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Ja, Löschen!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "" "Alle Daten werden gelöscht, eine Wiederherstellung wird nicht mehr möglich " "sein." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Ja, alles löschen!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "Ein Benutzername ist für die Verbindung erforderlich!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Eine Datei auswählen" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Speichern" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_Abbrechen" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "Es konnte keine Verbindung zu %s hergestellt werden" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Die Bibliothek konnte nicht exportiert werden " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Willkommen bei Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "" "Verbinden Sie sich mit einer beliebigen lokalen oder externen Datenbank." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Neue Datenbank hinzufügen" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "" "Verbindung zu einer Datenbank herstellen und in der Bibliothek speichern" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Ein neues Sequeler-Fenster öffnen" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Verbindungen importieren" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Importieren von zuvor exportierten Sequeler-Verbindungen" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Datei auswählen" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Öffnen" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Die Bibliothek konnte nicht importiert werden " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Tabelle suchen" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Tabelle suchen…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Tabellen erneut laden" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Tabelle hinzufügen" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Datenbank auswählen -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "TABELLEN" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Struktur" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "Inhalt" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "Beziehungen" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Abfrage" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Ansicht verkleinern" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "Ansicht 1:1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Ansicht vergrößern" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Hoher Kontrast" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Solarisiert Hell" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Solarisiert Dunkel" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Textstil verändern" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Abfrage %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Tabelle auswählen" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "" "Wählen Sie auf der linken Seite eine Tabelle aus, um diese Ansicht zu " "aktivieren." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Keine Ergebnisse verfügbar" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Ergebnisse erneut laden" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " Felder" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Vorherige Seite" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Nächste Seite" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d Seiten" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Zur Seite springen…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 Seite" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d von %d Seiten" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d Einträge" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " Bedingungen" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Abfrage wird ausgeführt…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Ergebnisse exportieren" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "Als CSV exportieren" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Als Text exportieren" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Abfrage konnte nicht verarbeitet werden!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d Ergebnisse" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Abfrage erfolgreich ausgeführt! Betroffene Zeilen: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Abfrage ausgeführt!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Abfrage ausführen" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "Verbinden" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Verbindung bearbeiten" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Verbindung duplizieren" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Verbindung löschen" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Optionen" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Fehler" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "bei Spalte" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Kopiere %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (Kopie)" #: src/Services/ActionManager.vala:254 msgid "Are you sure you want to delete this Database?" msgstr "Sind Sie sicher, dass Sie diese Datenbank löschen möchten?" #: src/Services/ActionManager.vala:254 msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "" "Alle Tabellen und Daten werden gelöscht und können nicht wiederhergestellt " "werden." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Libssh2-Initialisierung fehlgeschlagen (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Der TCP-Socket konnte nicht geöffnet werden" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "Die Verbindung konnte nicht hergestellt werden!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "Fehler beim Starten der SSH-Sitzung: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "Die Authentifizierung mit dem Passwort ist fehlgeschlagen!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "" "Die Authentifizierung durch den öffentlichen Schlüssel ist fehlgeschlagen!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Keine unterstützten Authentifizierungsmethoden gefunden!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Fehler beim Öffnen des TCP-Sockets für eine eingehende Verbindung" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "" "Die Verbindung konnte nicht hergestellt werden. Prüfen Sie den Port der " "Datenbank!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "Fehler beim Warten auf eine eingehende Verbindung!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Die Remoteverbindung konnte nicht akzeptiert werden!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "Der direct-tcpip Kanal konnte nicht geöffnet werden! (Beachten Sie, dass " "dies ein Problem auf dem Server sein kann! Bitte überprüfen Sie die " "Serverprotokolle.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Fehler!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "Fehlender SSH-Schlüssel!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "Fehlender öffentlicher SSH-Schlüssel!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "Verbindung" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Verbindungsfarbe auswählen" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Name der Verbindung:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Verbindungsname" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Datenbanktyp:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Host:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Datenbankname:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Benutzername:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Passwort:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Passwort anzeigen" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Passwort ausblenden" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Port:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "SSL verwenden:" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Dateipfad:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Wähle eine SQLite Datei…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "Verbindung über einen SSH Tunnel herstellen:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "SSH Host:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "SSH Benutzername:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "SSH Passwort:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "SSH Port:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Optional" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "SSH-Identität" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Wählen Sie Ihre Identitätsdatei aus…" #: src/Widgets/ConnectionDialog.vala:332 msgid "SSH Public Key" msgstr "Öffentlicher SSH-Schlüssel" #: src/Widgets/ConnectionDialog.vala:334 msgid "Select Your Public Key File…" msgstr "Wählen Sie Ihre öffentliche Schlüsseldatei aus…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "SSH-Schlüssel erstellen" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "SSH-Tunnel" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Schließen" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Verbindung speichern" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Verbindung testen" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Öffne SSH Tunnel…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "Verbindung wird getestet…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "Erfolgreich verbunden!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "Verbindung wird gespeichert…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "Verbindung gespeichert!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "Verbinde…" #~ msgid "Light background" #~ msgstr "Heller Hintergrund" #~ msgid "Dark background" #~ msgstr "Dunkler Hintergrund" ellie-commons-sequeler-9963fb4/po/es.po000066400000000000000000000400511512323162700200370ustar00rootroot00000000000000# Spanish translations for io.github.ellie_commons.sequeler package. # Copyright (C) 2020 THE io.github.ellie_commons.sequeler'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # Adolfo Jayme Barrientos , 2020. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-06-30 03:06+0000\n" "Last-Translator: DP \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.13-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "No se admiten los directorios" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "No se sabe qué hacer" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Se produjo una situación inesperada" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Finalizar sesión" #: src/Layouts/HeaderBar.vala:56 msgid "Create a new database" msgstr "Crear una nueva base de datos" #: src/Layouts/HeaderBar.vala:65 msgid "Delete database" msgstr "Eliminar base de datos" #: src/Layouts/HeaderBar.vala:74 msgid "Database properties" msgstr "Propiedades de la base de datos" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Ventana nueva" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Conexión nueva" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Salir" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Menú" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Conectado con %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "CONEXIONES GUARDADAS" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Eliminar todas" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Recargar biblioteca" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Exportar biblioteca" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "¿Confirma que quiere continuar?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "Si elimina esta conexión, no será capaz de recuperar los datos." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Sí, eliminarla" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "Se eliminarán todos los datos y no será capaz de recuperarlos." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Sí, eliminarlo todo" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "Se necesita un nombre de usuario para establecer la conexión." #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Elija un archivo" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Guardar" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_Cancelar" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "No se pudo conectar con %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "No se pudo exportar la biblioteca " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Le damos la bienvenida a Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "Conéctese con cualquier base de datos local o remota." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Añadir base de datos nueva" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "Conéctese con una base de datos y guárdela en la biblioteca" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Abrir una ventana nueva de Sequeler" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Importar conexiones" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Abrir conexiones de Sequeler exportadas anteriormente" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Seleccione un archivo" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Abrir" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "No se pudo importar la biblioteca " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Buscar en las tablas" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Buscar en las tablas…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Recargar tablas" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Añadir tabla" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Seleccione una base de datos -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "TABLAS" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Estructura" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "Contenido" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "Relaciones" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Consulta" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Alejar" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "Escala 1∶1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Acercar" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Contraste alto" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Solarizado claro" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Solarizado oscuro" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Cambiar estilo de texto" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Crear pestaña de consulta" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Consulta %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Seleccionar tabla" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "" "Seleccione una tabla de la barra lateral izquierda para activar esta vista." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "No se encontraron resultados" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Recargar resultados" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " campos" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Página anterior" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Página siguiente" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d páginas" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Saltar a la página…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 página" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d de %d páginas" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d entradas" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " restricciones" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Ejecutando la consulta…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Exportar resultados" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "Exportar como CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Exportar como texto" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "No se pudo procesar la consulta." #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d resultados en total" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Se ejecutó la consulta correctamente. Filas afectadas: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Se ha ejecutado la consulta." #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Ejecutar consulta" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "Conectar" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Editar conexión" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Duplicar conexión" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Eliminar conexión" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Opciones" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Error" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "en la columna" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Copiar %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (copia)" #: src/Services/ActionManager.vala:254 msgid "Are you sure you want to delete this Database?" msgstr "¿Confirma que quiere eliminar esta base de datos?" #: src/Services/ActionManager.vala:254 msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "" "Se eliminarán todas las tablas y datos y no será capaz de recuperarlos." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "No se pudo inicializar libssh2 (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Fallo al abrir socket" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "No se pudo establecer la conexión." #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "Error al iniciar la sesión SSH: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "No se pudo autenticar por contraseña." #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "No se pudo autenticar por clave pública." #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "No se encontró ningún método de autenticación admitido." #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Fallo al abrir socket de escucha" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "" "No se pudo vincular. Puede que el puerto de su base de datos sea erróneo." #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "No se pudo escuchar." #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "No se pudo aceptar la conexión remota." #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "No se pudo abrir el canal direct-tcpip (Nota: esto puede ser un problema con " "el servidor. Revise los registros del servidor.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "¡Error!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "Falta el archivo de clave SSH." #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "Falta la clave SSH pública." #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "Conexión" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Seleccionar el color de la conexión" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Nombre de la conexión:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Nombre de la conexión" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Tipo de base de datos:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Anfitrión:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Nombre de la base de datos:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Nombre de usuario:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Contraseña:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Mostrar contraseña" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Ocultar contraseña" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Puerto:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "Usar SSL:" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Ruta de archivo:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Seleccione su archivo SQLite…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "Conectar mediante túnel SSH:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "Anfitrión SSH:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "Nombre de usuario SSH:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "Contraseña SSH:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "Puerto SSH:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Opcional" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "Identidad SSH" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Seleccione su archivo de identidad…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "Falta la clave SSH pública." #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "Seleccione su archivo SQLite…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Generar clave SSH" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "Túnel SSH" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Cerrar" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Guardar conexión" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Probar conexión" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Abriendo túnel SSH…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "Probando la conexión…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "Se ha conectado correctamente." #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "Guardando la conexión…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "Se guardó la conexión." #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "Conectando…" #~ msgid "Light background" #~ msgstr "Fondo claro" #~ msgid "Dark background" #~ msgstr "Fondo oscuro" ellie-commons-sequeler-9963fb4/po/et.po000066400000000000000000000370771512323162700200560ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-12-25 11:37+0000\n" "Last-Translator: Priit Jõerüüt \n" "Language-Team: Estonian \n" "Language: et\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.15.1\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Kaustad pole toetatud" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Kohe ei tea, mida nüüd teha" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Juhtus midagi täiesti ootamatut" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Logi välja" #: src/Layouts/HeaderBar.vala:56 msgid "Create a new database" msgstr "Loo uus andmebaas" #: src/Layouts/HeaderBar.vala:65 msgid "Delete database" msgstr "Kustuta andmebaas" #: src/Layouts/HeaderBar.vala:74 msgid "Database properties" msgstr "Andmebaasi omadused" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Uus aken" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Uus ühendus" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Välju" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Menüü" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Ühendatud serveriga %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "SALVESTATUD ÜHENDUSED" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Kustuta kõik" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Laadi kogumik uuesti" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Ekspordi kogumik" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Kas sa oled kindel, et soovid jätkata?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "Selle ühenduse kustutamisel sa ei saa neid andmeid enam taastada." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Jah, kustuta!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "Kõik andmed kustutakse ja sa ei saa neid enam taastada." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Jah, kustuta kõik!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "Ühenduse loomiseks on vajalik kasutajanimi!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Vali fail" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Salvesta" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_Katkesta" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "Ei õnnestu luua ühendust serveriga %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Kogumiku eksportimine ei õnnestu " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Tere tulemast - see on Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "Loo ühendus kohalike või kaugseadmes asuvate andmebaasidega." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Lisa uus andmebaas" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "Loo ühendus andmebaasiga ja lisa see oma kogumikku" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Ava uus Sequeleri aken" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Impordi ühendusi" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Impordi varem eksporditud Sequeleri ühendusi" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Vali fail" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Ava" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Kogumikku ei õnnestu importida " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Otsi tabeleid" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Otsi tabeleid…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Laadi tabelid uuesti" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Lisa tabel" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Vali andmebaas -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "TABELID" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Struktuur" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "Sisu" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "Relatsioonid" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Päring" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Suumi välja" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "1:1 suum" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Suumi sisse" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Väga kontrastne" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Hele päikesekuma" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Tume päikesekuma" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Muuda teksti stiili" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Loo uus päringu vahekaart" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Päring: %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Vali tabel" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "Selle vaate aktiveerimiseks vali tabel vasakust külgpaanist." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Tulemusi pole saadaval" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Laadi tulemused uuesti" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " Väljad" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Eelmine leht" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Järgmine leht" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d lehte" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Minele lehele…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 leht" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d / %d lehte" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d kirjet" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " Kitsendused" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Päring on töös…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Ekspordi tulemused" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "Ekspordi csv-failina" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Ekspordi tekstina" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Päringut ei õnnestu töödelda!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "Kokku %d tulemust" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Päringu käivitamine õnnestus! Tulemus: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Päring on käivitatud!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Käivita päring" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "Ühenda" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Muuda ühendust" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Tee ühendusest koopia" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Kustuta ühendus" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Eelistused" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Viga" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "veerus" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Kopeeri %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (koopia)" #: src/Services/ActionManager.vala:254 msgid "Are you sure you want to delete this Database?" msgstr "Kas sa oled kindel, et soovid selle andmebaasi kustutada?" #: src/Services/ActionManager.vala:254 msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "Kõik tabelid ja andmed kustutakse ja sa ei saa neid taastada." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Libssh2 teegi valmendamine ei õnnestunud (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Sokli avamine ei õnnestunud" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "Ei õnnestunud luua ühendust!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "SSH sessiooni käivitamisel tekkis viga: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "Ei õnnestunud autentida salasõnaga!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "Ei õnnestunud autentida avaliku võtmega!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Ühtegi toetatud autentimismeetodit ei leidunud!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Päringute kuulamiseks vajalikku soklit ei õnnestunud avada" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "Pordi sidumine ei õnnestunud. Andmebaasi port võib olla vale!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "Ei õnnestunud kuulata!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Ei õnnestunud nõustuda kaugpäringuga!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "„Direct-tcpip“ kanali avamine ei õnnestunud! (Palun arvesta, et see võib " "olla ka serveri viga! Täpsemat teavet leiad serveri logidest.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Viga!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "SSH võtmefail on puudu!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "SSH avalik võti on puudu!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "Ühendus" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Vali ühenduse värv" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Ühenduse nimi:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Ühenduse nimi" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Andmebaasi tüüp:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Host:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Andmebaasi nimi:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Kasutajanimi:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Salasõna:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Näita salasõna" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Peida salasõna" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Port:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "Kasuta SSL-i:" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Faili asukoht:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Vali oma SQLite'i fail…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "Ühenda SSH tunneli kaudu:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "SSH host:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "SSH kasutajanimi:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "SSH salasõna:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "SSH port:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Valikuline" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "SSH identiteet" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Vali oma identiteedifail…" #: src/Widgets/ConnectionDialog.vala:332 msgid "SSH Public Key" msgstr "SSH avalik võti" #: src/Widgets/ConnectionDialog.vala:334 msgid "Select Your Public Key File…" msgstr "Vali oma avaliku võtme fail…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Loo SSH võti" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "SSH tunnel" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Sulge" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Salvesta ühendus" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Testi ühendust" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Avan SSH tunnelit…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "Testin ühendust…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "Õnnestus ühendada!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "Salvestan ühendust…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "Ühendus on salvestatud!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "Ühendan…" #~ msgid "Light background" #~ msgstr "Hele taust" #~ msgid "Dark background" #~ msgstr "Tume taust" ellie-commons-sequeler-9963fb4/po/extra/000077500000000000000000000000001512323162700202135ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/po/extra/LINGUAS000066400000000000000000000000171512323162700212360ustar00rootroot00000000000000de fr lt ja et ellie-commons-sequeler-9963fb4/po/extra/POTFILES000066400000000000000000000001551512323162700213640ustar00rootroot00000000000000data/io.github.ellie_commons.sequeler.desktop.in.in data/io.github.ellie_commons.sequeler.metainfo.xml.in.in ellie-commons-sequeler-9963fb4/po/extra/de.po000066400000000000000000000665221512323162700211560ustar00rootroot00000000000000# German translations for extra package. # Copyright (C) 2020 THE extra'S COPYRIGHT HOLDER # This file is distributed under the same license as the extra package. # Peter Nerlich , 2020. # msgid "" msgstr "" "Project-Id-Version: extra\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2020-04-11 12:12+0200\n" "Last-Translator: Peter Nerlich \n" "Language-Team: none\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: data/io.github.ellie_commons.sequeler.desktop.in.in:6 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:7 msgid "Sequeler" msgstr "Sequeler" #: data/io.github.ellie_commons.sequeler.desktop.in.in:7 #, fuzzy #| msgid "Friendly SQL Client" msgid "SQL Client" msgstr "Benutzerfreundlicher SQL-Client" #: data/io.github.ellie_commons.sequeler.desktop.in.in:8 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:10 msgid "Easily connect to your local or remote database" msgstr "" "Verbinden Sie sich mit einer beliebigen lokalen oder externen Datenbank" #: data/io.github.ellie_commons.sequeler.desktop.in.in:13 msgid "SQL;MySql;Database;MariaDB;S3;PostgreSQL;" msgstr "SQL;MySql;Database;MariaDB;S3;PostgreSQL;" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:8 msgid "Friendly SQL Client" msgstr "Benutzerfreundlicher SQL-Client" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:13 #, fuzzy msgid "" "Store your Database Connections in the library, connect over SSH tunnel, " "type and execute SQL commands directly in the app, and do everything you " "need to do without the necessity of opening the terminal." msgstr "" "Speichern Sie Ihre Datenbankverbindungen in der integrierten Bibliothek, " "führen Sie SQL-Befehle direkt in der Anwendung aus, und tun Sie alles, was " "Sie tun müssen, ohne das Terminal öffnen zu müssen." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:16 msgid "Supported Databases:" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:20 msgid "SQLite" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:21 msgid "MySQL" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:22 msgid "MariaDB" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:23 msgid "PostgreSQL" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:25 msgid "Features Include:" msgstr "Zu den Funktionen gehören:" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:29 msgid "Test Connections before saving them" msgstr "Verbindung vor dem Speichern testen" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:30 msgid "View Table structure, content, and relations" msgstr "Anzeigen von Tabellenstruktur, Inhalt und Beziehungen" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:31 msgid "Write multiple custom SQL Queries" msgstr "Mehrere benutzerdefinierte SQL-Abfragen schreiben" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:32 msgid "Switch between light and dark mode" msgstr "Zwischen dem hellen und dunklen Modus umschalten" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:33 #, fuzzy msgid "" "Handy keyboard shortcuts to quit (ctrl+q), create new connection " "(ctrl+shift+n), open a new window (ctrl+n)" msgstr "" "Tastenkombinationen zum Beenden (Strg+q), Erstellen einer neuen Verbindung " "(Strg+Shift+n), mehrere Instanzen (Strg+n)" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:43 msgid "Fix translations are not loaded in Flatpak" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:44 msgid "Modernize the UI to fall in line with modern desktop environments" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:45 msgid "Update Flatpak platform runtime and modules" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:46 msgid "Update translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:61 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:70 msgid "Odin release" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:63 msgid "Update elementary OS Platform runtime." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:64 msgid "Update screenshots." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:72 msgid "" "Updated translations for Ukranian, Russian, Indonisian, Chinese, Lithuanian, " "Portugese, Turkish, and Arabic." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:78 msgid "New Features" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:80 msgid "Create, Edit, and Delete databases." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:81 msgid "New context menu to copy and edit tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:82 #, fuzzy msgid "Support unencrypted connections." msgstr "Gesamtzahl der gespeicherten Verbindungen." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:84 msgid "Bug Fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:86 msgid "Fix copy column data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:88 msgid "Translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:90 msgid "Updated translations for Ukranian, Russian, French, and German." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:96 msgid "Reduced CPU usage by 2%." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:97 msgid "" "Update translations for Italian, Spanish, Catalan, French, Hindi, Russian, " "and Turkish." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:102 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:125 msgid "More fixes!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:103 msgid "0.7.8 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:105 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:127 msgid "Fixed usage attempt of wrong Vala method." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:107 msgid "0.7.7 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:109 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:135 msgid "Fix nasty GSettings bug causing the app to crash." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:110 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:136 msgid "Implement GDA Placeholder statement." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:111 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:137 msgid "Improve Query Tab iconography." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:113 msgid "0.7.6 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:115 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:145 msgid "Fix ORDER BY in PostgreSQL Relationship view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:116 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:146 msgid "Improve MySQL structure view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:117 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:147 msgid "Drop Granite.Settings in favour of GLib.Settings." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:118 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:148 msgid "Implement Granite.Notebook on the Query tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:119 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:149 msgid "Show query error messages inline." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:133 msgid "Because 0.7.6 never happened!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:143 msgid "Query Tab Bonanza!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:155 msgid "New features and improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:157 #, fuzzy msgid "You can now duplicate connections." msgstr "Gesamtzahl der gespeicherten Verbindungen." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:158 msgid "" "Sorting columns now works as expected by actually running the ORDER BY query." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:159 msgid "" "Quickly jump to a specific result page with the handy dandy pagination " "popover." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:160 msgid "Show Comment Column inside table structure view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:166 msgid "The 2020 release!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:168 #, fuzzy msgid "Manually reorder saved connection." msgstr "Gesamtzahl der gespeicherten Verbindungen." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:169 msgid "Allow selecting a custom SSH public key." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:170 msgid "Fix SSH tunnel crashes." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:176 msgid "Raw Query Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:178 msgid "Strip comments from SQL raw queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:179 msgid "Better handle complex queries on multiple lines." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:180 msgid "Speed up query rendering." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:186 msgid "Sweet Query Tab Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:188 msgid "Edit font size of the Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:189 msgid "Edit background style of the Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:190 msgid "Save and remember the Query Tab size." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:196 msgid "PostgreSQL Fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:198 msgid "Fixed PostgreSQL relationship table." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:199 msgid "Fixed wrong response message when handling non select queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:205 msgid "Bite-Size fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:207 msgid "Removed unused libfixposix." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:208 msgid "Fixed pagination issue when clicking too fast while fetching big data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:214 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:225 msgid "Bug fixes and improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:216 msgid "Rewritten pagination to use LIMIT and OFFSET." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:217 msgid "Faster pagination and content viewing for big data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:218 msgid "Show records count in table's list." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:219 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:252 msgid "Bug fixes and other improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:227 msgid "Properly handle EXPLAIN SQL statement." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:228 msgid "Properly handle querying capitlized PostgreSQL tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:229 msgid "Improved async methods for internal views." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:230 msgid "Updated translations." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:236 msgid "Critical bug fix!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:238 msgid "CRITICAL: Fixes missing GSettings Schema, restore lost connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:239 msgid "Other small bug fixes and improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:245 msgid "Implemented SSH tunneling" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:247 msgid "" "WARNING: This release packs many updates and something could break. Please, " "backup your connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:248 #, fuzzy msgid "Connect via SSH to a remote Database." msgstr "Zu einer lokalen oder entfernten Datenbank verbinden" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:249 msgid "Major code refactor to handle UI updates via async methods." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:250 msgid "" "Use Stack container to show a loading Spinner during fetch or data " "processing methods." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:251 msgid "" "Major performance improvements to the table search and dropdown schema " "switcher." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:258 msgid "Fancy New Icon!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:260 msgid "New fancy Icon." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:261 msgid "Use GtkNativeDialog." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:262 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:272 msgid "Bug fixes and Improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:268 msgid "Open SQLite files" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:270 msgid "Open SQLite files directly in Sequeler." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:271 msgid "Right click to copy data inside a column." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:278 msgid "UI Fixes and Performance Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:280 msgid "UI fix for logout button." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:281 msgid "View shortcuts on preferences dropdown." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:282 msgid "Performance Improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:283 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:351 msgid "Italian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:289 msgid "Export all the things!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:291 msgid "Export results from Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:292 msgid "Export in CSV or Plain Text format." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:293 msgid "Sort Columns order everywhere." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:294 msgid "Brazilian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:300 msgid "Here comes the power of Pagination!!!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:302 msgid "Paginate results in the Content tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:303 msgid "Query messages UI improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:304 msgid "Relations table bug fixes." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:310 msgid "We got Multi SQL Query support." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:312 msgid "Ability to handle multiple SQL queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:313 msgid "Execute the currently highlighted query." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:314 msgid "Improved Library Popover UI." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:315 msgid "Use native GTK+ CSS attributes for better Light/Dark mode." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:316 msgid "Random UI improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:322 msgid "Urgent! Fixed broken Tabs for translated version." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:327 msgid "Light and Dark Mode Switch!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:329 msgid "Better Dark/Light mode switch in header bar." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:330 msgid "Add Russian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:331 msgid "Updated Welcome screen with New Window command." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:332 msgid "Code cleanup." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:338 msgid "Official Juno release!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:340 msgid "Missing filter name on SQLite File Dialog." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:346 msgid "We got Search!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:348 msgid "Search table names in sidebar." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:349 msgid "Fixes issue in connecting directly on a non saved connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:350 msgid "Updated Lithuanian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:357 msgid "Improved Password Security." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:359 msgid "Safely store passwords in LibSecret." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:360 msgid "Auto upgrade on startup to remove passwords from GSettings." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:361 msgid "" "Fixes issues with identical table names from other database in the same " "connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:362 msgid "Alphabetically ordered tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:363 msgid "Improvements in showing MySql/MariaDB Table Structure." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:364 msgid "Many more bugs for you to discover." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:370 #, fuzzy msgid "New Icon and Import/Export Library." msgstr "Abfrage konnte nicht verarbeitet werden!" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:372 msgid "Fancy new icon." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:373 #, fuzzy msgid "Import and Export connections library." msgstr "Verbindung testen" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:374 msgid "Fixed random crash when opening and closing multiple connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:375 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:381 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:393 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:416 msgid "Bug fixes and improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:383 msgid "Fixed PostgreSQL Schema show options." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:384 msgid "" "Fixed crash on new connection dialog when opening the connection before " "saving." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:390 msgid "Little side dish update." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:392 msgid "Fixed save window state on close." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:399 msgid "Alternate coloured rows!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:401 msgid "Manually reload Content, Structure, and Relations." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:402 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:413 msgid "Show Table schema, content, and constraint relationships." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:403 msgid "Properly handle compound queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:404 msgid "Fix PostgreSQL table switch." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:410 msgid "Complete rewrite of the entire code base!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:412 msgid "Handle multiple Windows/Instances and multiple open connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:414 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:426 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:438 msgid "Quicker response on big select queries" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:415 msgid "Better error handling." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:422 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:434 msgid "Better error handling, less crashes!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:424 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:436 msgid "The app doesn't crash when dealing with big values" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:425 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:437 msgid "Handling errors related to columns" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:427 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:439 msgid "Some small clean up" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:428 msgid "Fixes issue with SQL Lite encrypted path" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:445 msgid "New Icon, Better error messages!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:447 msgid "New shiny icon" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:448 msgid "View SQL error message on error" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:449 msgid "FIX: Show proper PostgreSql Schema Table in Sidebar" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:450 msgid "Snappiest query execution ever for local databases" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:451 msgid "The usual bundle of bugs for you to discover" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:457 msgid "Summoning the power of async methods!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:459 msgid "All DataBase queries are now async methods, super fast." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:460 msgid "The UI doesn't freeze anymore during a long process" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:461 msgid "Granite SourceList to display list of tables" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:462 msgid "Tabs to switch between the Query Builder and the Table Structure" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:463 msgid "ComboBox to select table schemas from the open connection" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:464 msgid "Many more bugs and issues for you to have fun with" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:470 msgid "Bug Fixes and Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:472 msgid "Display Table lists for SQLite and PostgreSQL" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:473 msgid "Refresh Table List view if tables change" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:474 msgid "Removed unused GSettings" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:480 msgid "" "This is so good you won't believe it. New Library UI, Schema Table, Custom " "Port, and more" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:482 msgid "" "A brand new Library View directly in your home screen, super tight and " "organized" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:483 msgid "Custom Port field for those snazzy geeks who don't just use 3306" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:484 msgid "A shiny new Sidebar View to list all your DataBase Tables" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:485 msgid "Code cleanup and speed improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:486 msgid "Usual abundance of bugs and issues for you to have fun with!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:492 msgid "Major Update: Releasing a sweet table to view Query Results!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:494 msgid "Did I say we got a sweet table to view query results?" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:495 msgid "New shortcut (ctrl+enter) to execute query" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:496 msgid "Solved bug while connecting to DB directly from the Connection Dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:497 msgid "UI Improvements to Connection Dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:498 msgid "Added Spanish and Lithuanian translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:504 msgid "UI fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:506 msgid "Visual improvements to the library view" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:512 msgid "Initial Release" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:514 msgid "Store your Database connections" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:515 #, fuzzy msgid "Quickly connect to a Local or Remote Database" msgstr "Zu einer lokalen oder entfernten Datenbank verbinden" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:516 msgid "Write SQL queries in the built-in code editor" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:523 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:527 msgid "Database view" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:531 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:535 msgid "New connection dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:540 msgid "Alessandro Castellani" msgstr "Alessandro Castellani" #~ msgid "Sequeler App" #~ msgstr "Sequeler Anwendung" #~ msgid "@icon@" #~ msgstr "@icon@" ellie-commons-sequeler-9963fb4/po/extra/et.po000066400000000000000000000672721512323162700212010ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extra package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: extra\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-06-03 12:48+0000\n" "Last-Translator: Priit Jõerüüt \n" "Language-Team: Estonian \n" "Language: et\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.12-dev\n" #: data/io.github.ellie_commons.sequeler.desktop.in.in:6 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:7 msgid "Sequeler" msgstr "Sequeler" #: data/io.github.ellie_commons.sequeler.desktop.in.in:7 #, fuzzy #| msgid "Friendly SQL Client" msgid "SQL Client" msgstr "Lihtne ja sõbralik SQL-i klient" #: data/io.github.ellie_commons.sequeler.desktop.in.in:8 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:10 msgid "Easily connect to your local or remote database" msgstr "Lihtne liidestus kohaliku või kaugseadmes asuva andmebaasiga" #: data/io.github.ellie_commons.sequeler.desktop.in.in:13 msgid "SQL;MySql;Database;MariaDB;S3;PostgreSQL;" msgstr "SQL;MySql;Database;MariaDB;S3;PostgreSQL;andmebaas;andmebaasi klient;" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:8 msgid "Friendly SQL Client" msgstr "Lihtne ja sõbralik SQL-i klient" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:13 msgid "" "Store your Database Connections in the library, connect over SSH tunnel, " "type and execute SQL commands directly in the app, and do everything you " "need to do without the necessity of opening the terminal." msgstr "" "Salvesta andmebaasiühendused oma kogumikku, loo ühendus SSH tunneli abil, " "sisesta ja käivita SQL-i käske otse rakendusest ning tee kõike seda " "vajalikku ilma terminali avamata." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:16 msgid "Supported Databases:" msgstr "Toetatud andmebaasid:" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:20 msgid "SQLite" msgstr "SQLite" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:21 msgid "MySQL" msgstr "MySQL" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:22 msgid "MariaDB" msgstr "MariaDB" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:23 msgid "PostgreSQL" msgstr "PostgreSQL" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:25 msgid "Features Include:" msgstr "Rakenduse funktsionaalsused:" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:29 msgid "Test Connections before saving them" msgstr "Enne salvestamist testi ühendusi" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:30 msgid "View Table structure, content, and relations" msgstr "Vaata tabelite struktuuri, sisu ja relatsioone" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:31 msgid "Write multiple custom SQL Queries" msgstr "Kirjuta SQL-päringuid vastavalt omavajadustele" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:32 msgid "Switch between light and dark mode" msgstr "Kasuta heledat või tumedat kujundust" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:33 msgid "" "Handy keyboard shortcuts to quit (ctrl+q), create new connection " "(ctrl+shift+n), open a new window (ctrl+n)" msgstr "" "Mugavad kiirklahvid väljumiseks (ctrl+q), uue ühenduse loomiseks " "(ctrl+shift+n) ja uue akna avamiseks (ctrl+n)" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:43 msgid "Fix translations are not loaded in Flatpak" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:44 msgid "Modernize the UI to fall in line with modern desktop environments" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:45 msgid "Update Flatpak platform runtime and modules" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:46 msgid "Update translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:61 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:70 msgid "Odin release" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:63 msgid "Update elementary OS Platform runtime." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:64 msgid "Update screenshots." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:72 msgid "" "Updated translations for Ukranian, Russian, Indonisian, Chinese, Lithuanian, " "Portugese, Turkish, and Arabic." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:78 msgid "New Features" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:80 msgid "Create, Edit, and Delete databases." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:81 msgid "New context menu to copy and edit tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:82 #, fuzzy #| msgid "You can now duplicate connections." msgid "Support unencrypted connections." msgstr "Nüüd saad teha ühendustest koopiaid." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:84 msgid "Bug Fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:86 msgid "Fix copy column data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:88 msgid "Translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:90 msgid "Updated translations for Ukranian, Russian, French, and German." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:96 msgid "Reduced CPU usage by 2%." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:97 msgid "" "Update translations for Italian, Spanish, Catalan, French, Hindi, Russian, " "and Turkish." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:102 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:125 msgid "More fixes!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:103 msgid "0.7.8 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:105 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:127 msgid "Fixed usage attempt of wrong Vala method." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:107 msgid "0.7.7 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:109 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:135 msgid "Fix nasty GSettings bug causing the app to crash." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:110 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:136 msgid "Implement GDA Placeholder statement." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:111 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:137 msgid "Improve Query Tab iconography." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:113 msgid "0.7.6 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:115 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:145 msgid "Fix ORDER BY in PostgreSQL Relationship view." msgstr "Parandsime ORDER BY vea PostgreSQL-i relatsioonide vaates." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:116 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:146 msgid "Improve MySQL structure view." msgstr "Täiustasime MySQL-i struktuuri vaadet." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:117 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:147 #, fuzzy #| msgid "Drop Granite.Settings in favor of GLib.Settings." msgid "Drop Granite.Settings in favour of GLib.Settings." msgstr "Asendasime „Granite.Settings“- kasutasime „GLib.Settings“-iga." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:118 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:148 msgid "Implement Granite.Notebook on the Query tab." msgstr "Lisasime „Granite.Notebook“-i päringute vahekaardile." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:119 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:149 msgid "Show query error messages inline." msgstr "Näitame päringute veateateid lõimituna." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:133 msgid "Because 0.7.6 never happened!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:143 msgid "Query Tab Bonanza!" msgstr "Palju võimalusi päringute vahekaartide kasutamiseks!" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:155 msgid "New features and improvements" msgstr "Uued funktsionaalsused ja täiendused" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:157 msgid "You can now duplicate connections." msgstr "Nüüd saad teha ühendustest koopiaid." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:158 msgid "" "Sorting columns now works as expected by actually running the ORDER BY query." msgstr "" "Veergude järjestamine toimib nüüd korrektselt, sest tõesti käivitame " "päringus ORDER BY tingimuse." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:159 msgid "" "Quickly jump to a specific result page with the handy dandy pagination " "popover." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:160 msgid "Show Comment Column inside table structure view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:166 msgid "The 2020 release!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:168 msgid "Manually reorder saved connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:169 msgid "Allow selecting a custom SSH public key." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:170 msgid "Fix SSH tunnel crashes." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:176 msgid "Raw Query Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:178 msgid "Strip comments from SQL raw queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:179 msgid "Better handle complex queries on multiple lines." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:180 msgid "Speed up query rendering." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:186 msgid "Sweet Query Tab Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:188 msgid "Edit font size of the Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:189 msgid "Edit background style of the Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:190 msgid "Save and remember the Query Tab size." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:196 msgid "PostgreSQL Fixes" msgstr "PostgreSQLi veaparandused" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:198 msgid "Fixed PostgreSQL relationship table." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:199 msgid "Fixed wrong response message when handling non select queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:205 msgid "Bite-Size fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:207 msgid "Removed unused libfixposix." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:208 msgid "Fixed pagination issue when clicking too fast while fetching big data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:214 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:225 msgid "Bug fixes and improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:216 msgid "Rewritten pagination to use LIMIT and OFFSET." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:217 msgid "Faster pagination and content viewing for big data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:218 msgid "Show records count in table's list." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:219 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:252 msgid "Bug fixes and other improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:227 msgid "Properly handle EXPLAIN SQL statement." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:228 msgid "Properly handle querying capitlized PostgreSQL tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:229 msgid "Improved async methods for internal views." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:230 msgid "Updated translations." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:236 msgid "Critical bug fix!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:238 msgid "CRITICAL: Fixes missing GSettings Schema, restore lost connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:239 msgid "Other small bug fixes and improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:245 msgid "Implemented SSH tunneling" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:247 msgid "" "WARNING: This release packs many updates and something could break. Please, " "backup your connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:248 msgid "Connect via SSH to a remote Database." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:249 msgid "Major code refactor to handle UI updates via async methods." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:250 msgid "" "Use Stack container to show a loading Spinner during fetch or data " "processing methods." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:251 msgid "" "Major performance improvements to the table search and dropdown schema " "switcher." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:258 msgid "Fancy New Icon!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:260 msgid "New fancy Icon." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:261 msgid "Use GtkNativeDialog." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:262 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:272 msgid "Bug fixes and Improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:268 msgid "Open SQLite files" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:270 msgid "Open SQLite files directly in Sequeler." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:271 msgid "Right click to copy data inside a column." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:278 msgid "UI Fixes and Performance Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:280 msgid "UI fix for logout button." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:281 msgid "View shortcuts on preferences dropdown." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:282 msgid "Performance Improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:283 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:351 msgid "Italian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:289 msgid "Export all the things!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:291 msgid "Export results from Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:292 msgid "Export in CSV or Plain Text format." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:293 msgid "Sort Columns order everywhere." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:294 msgid "Brazilian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:300 msgid "Here comes the power of Pagination!!!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:302 msgid "Paginate results in the Content tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:303 msgid "Query messages UI improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:304 msgid "Relations table bug fixes." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:310 msgid "We got Multi SQL Query support." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:312 msgid "Ability to handle multiple SQL queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:313 msgid "Execute the currently highlighted query." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:314 msgid "Improved Library Popover UI." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:315 msgid "Use native GTK+ CSS attributes for better Light/Dark mode." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:316 msgid "Random UI improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:322 msgid "Urgent! Fixed broken Tabs for translated version." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:327 msgid "Light and Dark Mode Switch!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:329 msgid "Better Dark/Light mode switch in header bar." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:330 msgid "Add Russian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:331 msgid "Updated Welcome screen with New Window command." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:332 msgid "Code cleanup." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:338 msgid "Official Juno release!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:340 msgid "Missing filter name on SQLite File Dialog." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:346 msgid "We got Search!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:348 msgid "Search table names in sidebar." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:349 msgid "Fixes issue in connecting directly on a non saved connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:350 msgid "Updated Lithuanian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:357 msgid "Improved Password Security." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:359 msgid "Safely store passwords in LibSecret." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:360 msgid "Auto upgrade on startup to remove passwords from GSettings." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:361 msgid "" "Fixes issues with identical table names from other database in the same " "connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:362 msgid "Alphabetically ordered tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:363 msgid "Improvements in showing MySql/MariaDB Table Structure." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:364 msgid "Many more bugs for you to discover." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:370 msgid "New Icon and Import/Export Library." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:372 msgid "Fancy new icon." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:373 msgid "Import and Export connections library." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:374 msgid "Fixed random crash when opening and closing multiple connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:375 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:381 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:393 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:416 msgid "Bug fixes and improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:383 msgid "Fixed PostgreSQL Schema show options." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:384 msgid "" "Fixed crash on new connection dialog when opening the connection before " "saving." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:390 msgid "Little side dish update." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:392 msgid "Fixed save window state on close." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:399 msgid "Alternate coloured rows!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:401 msgid "Manually reload Content, Structure, and Relations." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:402 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:413 msgid "Show Table schema, content, and constraint relationships." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:403 msgid "Properly handle compound queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:404 msgid "Fix PostgreSQL table switch." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:410 msgid "Complete rewrite of the entire code base!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:412 msgid "Handle multiple Windows/Instances and multiple open connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:414 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:426 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:438 msgid "Quicker response on big select queries" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:415 msgid "Better error handling." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:422 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:434 msgid "Better error handling, less crashes!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:424 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:436 msgid "The app doesn't crash when dealing with big values" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:425 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:437 msgid "Handling errors related to columns" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:427 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:439 msgid "Some small clean up" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:428 msgid "Fixes issue with SQL Lite encrypted path" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:445 msgid "New Icon, Better error messages!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:447 msgid "New shiny icon" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:448 msgid "View SQL error message on error" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:449 msgid "FIX: Show proper PostgreSql Schema Table in Sidebar" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:450 msgid "Snappiest query execution ever for local databases" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:451 msgid "The usual bundle of bugs for you to discover" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:457 msgid "Summoning the power of async methods!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:459 msgid "All DataBase queries are now async methods, super fast." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:460 msgid "The UI doesn't freeze anymore during a long process" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:461 msgid "Granite SourceList to display list of tables" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:462 msgid "Tabs to switch between the Query Builder and the Table Structure" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:463 msgid "ComboBox to select table schemas from the open connection" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:464 msgid "Many more bugs and issues for you to have fun with" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:470 msgid "Bug Fixes and Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:472 msgid "Display Table lists for SQLite and PostgreSQL" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:473 msgid "Refresh Table List view if tables change" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:474 msgid "Removed unused GSettings" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:480 msgid "" "This is so good you won't believe it. New Library UI, Schema Table, Custom " "Port, and more" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:482 msgid "" "A brand new Library View directly in your home screen, super tight and " "organized" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:483 msgid "Custom Port field for those snazzy geeks who don't just use 3306" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:484 msgid "A shiny new Sidebar View to list all your DataBase Tables" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:485 msgid "Code cleanup and speed improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:486 msgid "Usual abundance of bugs and issues for you to have fun with!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:492 msgid "Major Update: Releasing a sweet table to view Query Results!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:494 msgid "Did I say we got a sweet table to view query results?" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:495 msgid "New shortcut (ctrl+enter) to execute query" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:496 msgid "Solved bug while connecting to DB directly from the Connection Dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:497 msgid "UI Improvements to Connection Dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:498 msgid "Added Spanish and Lithuanian translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:504 msgid "UI fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:506 msgid "Visual improvements to the library view" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:512 msgid "Initial Release" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:514 msgid "Store your Database connections" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:515 msgid "Quickly connect to a Local or Remote Database" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:516 msgid "Write SQL queries in the built-in code editor" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:523 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:527 msgid "Database view" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:531 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:535 msgid "New connection dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:540 msgid "Alessandro Castellani" msgstr "Alessandro Castellani" #~ msgid "Sequeler App" #~ msgstr "Sequeleri rakendus" ellie-commons-sequeler-9963fb4/po/extra/extra.pot000066400000000000000000000640351512323162700220720ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extra package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: extra\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: data/io.github.ellie_commons.sequeler.desktop.in.in:6 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:7 msgid "Sequeler" msgstr "" #: data/io.github.ellie_commons.sequeler.desktop.in.in:7 msgid "SQL Client" msgstr "" #: data/io.github.ellie_commons.sequeler.desktop.in.in:8 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:10 msgid "Easily connect to your local or remote database" msgstr "" #: data/io.github.ellie_commons.sequeler.desktop.in.in:13 msgid "SQL;MySql;Database;MariaDB;S3;PostgreSQL;" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:8 msgid "Friendly SQL Client" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:13 msgid "" "Store your Database Connections in the library, connect over SSH tunnel, " "type and execute SQL commands directly in the app, and do everything you " "need to do without the necessity of opening the terminal." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:16 msgid "Supported Databases:" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:20 msgid "SQLite" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:21 msgid "MySQL" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:22 msgid "MariaDB" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:23 msgid "PostgreSQL" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:25 msgid "Features Include:" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:29 msgid "Test Connections before saving them" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:30 msgid "View Table structure, content, and relations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:31 msgid "Write multiple custom SQL Queries" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:32 msgid "Switch between light and dark mode" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:33 msgid "" "Handy keyboard shortcuts to quit (ctrl+q), create new connection " "(ctrl+shift+n), open a new window (ctrl+n)" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:43 msgid "Fix translations are not loaded in Flatpak" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:44 msgid "Modernize the UI to fall in line with modern desktop environments" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:45 msgid "Update Flatpak platform runtime and modules" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:46 msgid "Update translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:61 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:70 msgid "Odin release" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:63 msgid "Update elementary OS Platform runtime." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:64 msgid "Update screenshots." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:72 msgid "" "Updated translations for Ukranian, Russian, Indonisian, Chinese, Lithuanian, " "Portugese, Turkish, and Arabic." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:78 msgid "New Features" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:80 msgid "Create, Edit, and Delete databases." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:81 msgid "New context menu to copy and edit tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:82 msgid "Support unencrypted connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:84 msgid "Bug Fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:86 msgid "Fix copy column data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:88 msgid "Translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:90 msgid "Updated translations for Ukranian, Russian, French, and German." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:96 msgid "Reduced CPU usage by 2%." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:97 msgid "" "Update translations for Italian, Spanish, Catalan, French, Hindi, Russian, " "and Turkish." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:102 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:125 msgid "More fixes!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:103 msgid "0.7.8 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:105 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:127 msgid "Fixed usage attempt of wrong Vala method." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:107 msgid "0.7.7 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:109 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:135 msgid "Fix nasty GSettings bug causing the app to crash." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:110 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:136 msgid "Implement GDA Placeholder statement." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:111 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:137 msgid "Improve Query Tab iconography." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:113 msgid "0.7.6 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:115 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:145 msgid "Fix ORDER BY in PostgreSQL Relationship view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:116 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:146 msgid "Improve MySQL structure view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:117 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:147 msgid "Drop Granite.Settings in favour of GLib.Settings." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:118 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:148 msgid "Implement Granite.Notebook on the Query tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:119 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:149 msgid "Show query error messages inline." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:133 msgid "Because 0.7.6 never happened!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:143 msgid "Query Tab Bonanza!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:155 msgid "New features and improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:157 msgid "You can now duplicate connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:158 msgid "" "Sorting columns now works as expected by actually running the ORDER BY query." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:159 msgid "" "Quickly jump to a specific result page with the handy dandy pagination " "popover." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:160 msgid "Show Comment Column inside table structure view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:166 msgid "The 2020 release!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:168 msgid "Manually reorder saved connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:169 msgid "Allow selecting a custom SSH public key." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:170 msgid "Fix SSH tunnel crashes." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:176 msgid "Raw Query Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:178 msgid "Strip comments from SQL raw queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:179 msgid "Better handle complex queries on multiple lines." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:180 msgid "Speed up query rendering." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:186 msgid "Sweet Query Tab Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:188 msgid "Edit font size of the Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:189 msgid "Edit background style of the Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:190 msgid "Save and remember the Query Tab size." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:196 msgid "PostgreSQL Fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:198 msgid "Fixed PostgreSQL relationship table." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:199 msgid "Fixed wrong response message when handling non select queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:205 msgid "Bite-Size fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:207 msgid "Removed unused libfixposix." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:208 msgid "Fixed pagination issue when clicking too fast while fetching big data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:214 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:225 msgid "Bug fixes and improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:216 msgid "Rewritten pagination to use LIMIT and OFFSET." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:217 msgid "Faster pagination and content viewing for big data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:218 msgid "Show records count in table's list." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:219 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:252 msgid "Bug fixes and other improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:227 msgid "Properly handle EXPLAIN SQL statement." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:228 msgid "Properly handle querying capitlized PostgreSQL tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:229 msgid "Improved async methods for internal views." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:230 msgid "Updated translations." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:236 msgid "Critical bug fix!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:238 msgid "CRITICAL: Fixes missing GSettings Schema, restore lost connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:239 msgid "Other small bug fixes and improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:245 msgid "Implemented SSH tunneling" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:247 msgid "" "WARNING: This release packs many updates and something could break. Please, " "backup your connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:248 msgid "Connect via SSH to a remote Database." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:249 msgid "Major code refactor to handle UI updates via async methods." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:250 msgid "" "Use Stack container to show a loading Spinner during fetch or data " "processing methods." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:251 msgid "" "Major performance improvements to the table search and dropdown schema " "switcher." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:258 msgid "Fancy New Icon!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:260 msgid "New fancy Icon." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:261 msgid "Use GtkNativeDialog." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:262 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:272 msgid "Bug fixes and Improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:268 msgid "Open SQLite files" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:270 msgid "Open SQLite files directly in Sequeler." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:271 msgid "Right click to copy data inside a column." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:278 msgid "UI Fixes and Performance Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:280 msgid "UI fix for logout button." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:281 msgid "View shortcuts on preferences dropdown." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:282 msgid "Performance Improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:283 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:351 msgid "Italian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:289 msgid "Export all the things!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:291 msgid "Export results from Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:292 msgid "Export in CSV or Plain Text format." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:293 msgid "Sort Columns order everywhere." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:294 msgid "Brazilian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:300 msgid "Here comes the power of Pagination!!!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:302 msgid "Paginate results in the Content tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:303 msgid "Query messages UI improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:304 msgid "Relations table bug fixes." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:310 msgid "We got Multi SQL Query support." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:312 msgid "Ability to handle multiple SQL queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:313 msgid "Execute the currently highlighted query." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:314 msgid "Improved Library Popover UI." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:315 msgid "Use native GTK+ CSS attributes for better Light/Dark mode." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:316 msgid "Random UI improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:322 msgid "Urgent! Fixed broken Tabs for translated version." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:327 msgid "Light and Dark Mode Switch!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:329 msgid "Better Dark/Light mode switch in header bar." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:330 msgid "Add Russian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:331 msgid "Updated Welcome screen with New Window command." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:332 msgid "Code cleanup." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:338 msgid "Official Juno release!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:340 msgid "Missing filter name on SQLite File Dialog." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:346 msgid "We got Search!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:348 msgid "Search table names in sidebar." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:349 msgid "Fixes issue in connecting directly on a non saved connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:350 msgid "Updated Lithuanian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:357 msgid "Improved Password Security." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:359 msgid "Safely store passwords in LibSecret." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:360 msgid "Auto upgrade on startup to remove passwords from GSettings." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:361 msgid "" "Fixes issues with identical table names from other database in the same " "connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:362 msgid "Alphabetically ordered tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:363 msgid "Improvements in showing MySql/MariaDB Table Structure." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:364 msgid "Many more bugs for you to discover." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:370 msgid "New Icon and Import/Export Library." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:372 msgid "Fancy new icon." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:373 msgid "Import and Export connections library." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:374 msgid "Fixed random crash when opening and closing multiple connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:375 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:381 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:393 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:416 msgid "Bug fixes and improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:383 msgid "Fixed PostgreSQL Schema show options." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:384 msgid "" "Fixed crash on new connection dialog when opening the connection before " "saving." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:390 msgid "Little side dish update." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:392 msgid "Fixed save window state on close." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:399 msgid "Alternate coloured rows!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:401 msgid "Manually reload Content, Structure, and Relations." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:402 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:413 msgid "Show Table schema, content, and constraint relationships." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:403 msgid "Properly handle compound queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:404 msgid "Fix PostgreSQL table switch." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:410 msgid "Complete rewrite of the entire code base!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:412 msgid "Handle multiple Windows/Instances and multiple open connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:414 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:426 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:438 msgid "Quicker response on big select queries" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:415 msgid "Better error handling." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:422 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:434 msgid "Better error handling, less crashes!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:424 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:436 msgid "The app doesn't crash when dealing with big values" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:425 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:437 msgid "Handling errors related to columns" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:427 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:439 msgid "Some small clean up" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:428 msgid "Fixes issue with SQL Lite encrypted path" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:445 msgid "New Icon, Better error messages!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:447 msgid "New shiny icon" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:448 msgid "View SQL error message on error" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:449 msgid "FIX: Show proper PostgreSql Schema Table in Sidebar" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:450 msgid "Snappiest query execution ever for local databases" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:451 msgid "The usual bundle of bugs for you to discover" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:457 msgid "Summoning the power of async methods!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:459 msgid "All DataBase queries are now async methods, super fast." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:460 msgid "The UI doesn't freeze anymore during a long process" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:461 msgid "Granite SourceList to display list of tables" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:462 msgid "Tabs to switch between the Query Builder and the Table Structure" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:463 msgid "ComboBox to select table schemas from the open connection" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:464 msgid "Many more bugs and issues for you to have fun with" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:470 msgid "Bug Fixes and Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:472 msgid "Display Table lists for SQLite and PostgreSQL" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:473 msgid "Refresh Table List view if tables change" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:474 msgid "Removed unused GSettings" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:480 msgid "" "This is so good you won't believe it. New Library UI, Schema Table, Custom " "Port, and more" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:482 msgid "" "A brand new Library View directly in your home screen, super tight and " "organized" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:483 msgid "Custom Port field for those snazzy geeks who don't just use 3306" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:484 msgid "A shiny new Sidebar View to list all your DataBase Tables" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:485 msgid "Code cleanup and speed improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:486 msgid "Usual abundance of bugs and issues for you to have fun with!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:492 msgid "Major Update: Releasing a sweet table to view Query Results!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:494 msgid "Did I say we got a sweet table to view query results?" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:495 msgid "New shortcut (ctrl+enter) to execute query" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:496 msgid "Solved bug while connecting to DB directly from the Connection Dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:497 msgid "UI Improvements to Connection Dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:498 msgid "Added Spanish and Lithuanian translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:504 msgid "UI fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:506 msgid "Visual improvements to the library view" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:512 msgid "Initial Release" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:514 msgid "Store your Database connections" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:515 msgid "Quickly connect to a Local or Remote Database" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:516 msgid "Write SQL queries in the built-in code editor" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:523 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:527 msgid "Database view" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:531 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:535 msgid "New connection dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:540 msgid "Alessandro Castellani" msgstr "" ellie-commons-sequeler-9963fb4/po/extra/fr.po000066400000000000000000000714001512323162700211640ustar00rootroot00000000000000# French translations for extra package. # Copyright (C) 2020 THE extra'S COPYRIGHT HOLDER # This file is distributed under the same license as the extra package. # NathanBnm, 2020. # msgid "" msgstr "" "Project-Id-Version: extra\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-12-25 12:28+0000\n" "Last-Translator: Stella and Charlie \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.15.1\n" #: data/io.github.ellie_commons.sequeler.desktop.in.in:6 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:7 msgid "Sequeler" msgstr "Sequeler" #: data/io.github.ellie_commons.sequeler.desktop.in.in:7 msgid "SQL Client" msgstr "Un client SQL" #: data/io.github.ellie_commons.sequeler.desktop.in.in:8 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:10 msgid "Easily connect to your local or remote database" msgstr "Se connecter facilement à votre base de données locale ou distante." #: data/io.github.ellie_commons.sequeler.desktop.in.in:13 msgid "SQL;MySql;Database;MariaDB;S3;PostgreSQL;" msgstr "SQL;MySql;Base de données;MariaDB;S3;PostgreSQL;" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:8 msgid "Friendly SQL Client" msgstr "Un simple client SQL" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:13 msgid "" "Store your Database Connections in the library, connect over SSH tunnel, " "type and execute SQL commands directly in the app, and do everything you " "need to do without the necessity of opening the terminal." msgstr "" "Sauvez vos connexions de base de données dans la bibliothèque intégrée, " "entrez et exécutez les commandes SQL directement dans l'application, et " "faites tout ce dont vous avez besoin sans la nécessité d'ouvrir un terminal." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:16 msgid "Supported Databases:" msgstr "Formats de bases de données prises en charge :" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:20 msgid "SQLite" msgstr "SQLite" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:21 msgid "MySQL" msgstr "MySQL" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:22 msgid "MariaDB" msgstr "MariaDB" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:23 msgid "PostgreSQL" msgstr "PostgreSQL" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:25 msgid "Features Include:" msgstr "Fonctionnalités incluses :" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:29 msgid "Test Connections before saving them" msgstr "Tester les connexions avant de les enregistrer" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:30 msgid "View Table structure, content, and relations" msgstr "Voir la structure, le contenu et les relations des tables" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:31 msgid "Write multiple custom SQL Queries" msgstr "Écrire plusieurs requêtes SQL personnalisées" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:32 msgid "Switch between light and dark mode" msgstr "Changer entre le thème clair et le thème sombre" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:33 msgid "" "Handy keyboard shortcuts to quit (ctrl+q), create new connection " "(ctrl+shift+n), open a new window (ctrl+n)" msgstr "" "Raccourcis clavier pratiques pour quitter (Ctrl+Q), créer une nouvelle " "connexion (Ctrl+Maj+N), Ouvrir une nouvelle fenêtre (Ctrl+N)" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:43 msgid "Fix translations are not loaded in Flatpak" msgstr "" "Problème résolu où les traductions n'étaient pas chargées dans le flatpak" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:44 msgid "Modernize the UI to fall in line with modern desktop environments" msgstr "" "Modernisation de l'interface utilisateur pour l'aligner avec les " "environnements de bureau modernes" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:45 msgid "Update Flatpak platform runtime and modules" msgstr "Mise à jour de la plate-forme d'exécution Flatpak et des modules" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:46 msgid "Update translations" msgstr "Mise à jour des traductions" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:61 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:70 msgid "Odin release" msgstr "Release pour Odin" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:63 msgid "Update elementary OS Platform runtime." msgstr "Mise à jour de la plate-forme d'exécution d'elementary OS." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:64 msgid "Update screenshots." msgstr "Mise à jour des captures d'écran." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:72 msgid "" "Updated translations for Ukranian, Russian, Indonisian, Chinese, Lithuanian, " "Portugese, Turkish, and Arabic." msgstr "" "Traductions en Ukrainian, Russe, Indonésien, Chinois, Lithuanien, Portugais, " "Turc et Arabe mises à jour." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:78 msgid "New Features" msgstr "Nouvelles fonctionnalités" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:80 msgid "Create, Edit, and Delete databases." msgstr "Créer, modifier, et supprimer des bases de données." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:81 msgid "New context menu to copy and edit tables." msgstr "Nouveau menu contextuel pour copier et modifier des tables." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:82 msgid "Support unencrypted connections." msgstr "Support des connections non chiffrées." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:84 msgid "Bug Fixes" msgstr "Bogues corrigés" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:86 msgid "Fix copy column data." msgstr "Correction de la fonctionnalité pour copier les données d'une colonne." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:88 msgid "Translations" msgstr "Traductions" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:90 msgid "Updated translations for Ukranian, Russian, French, and German." msgstr "" "Mise à jour des traductions pour l'ukrainien, le russe, le français et " "l'allemand." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:96 msgid "Reduced CPU usage by 2%." msgstr "Réduction de l'usage processeur de 2%." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:97 msgid "" "Update translations for Italian, Spanish, Catalan, French, Hindi, Russian, " "and Turkish." msgstr "" "Mise à jour des traductions pour l'italien, l'espagnol, le catalan, le " "français, l'hindi, le russe, et le turc." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:102 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:125 msgid "More fixes!" msgstr "Davantage de corrections de bogues !" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:103 msgid "0.7.8 changelog" msgstr "0.7.8 changements" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:105 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:127 msgid "Fixed usage attempt of wrong Vala method." msgstr "" "Correction de la tentative d'utilisation d'une mauvaise méthode en Vala." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:107 msgid "0.7.7 changelog" msgstr "0.7.7 changements" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:109 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:135 msgid "Fix nasty GSettings bug causing the app to crash." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:110 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:136 msgid "Implement GDA Placeholder statement." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:111 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:137 msgid "Improve Query Tab iconography." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:113 msgid "0.7.6 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:115 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:145 msgid "Fix ORDER BY in PostgreSQL Relationship view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:116 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:146 msgid "Improve MySQL structure view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:117 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:147 msgid "Drop Granite.Settings in favour of GLib.Settings." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:118 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:148 msgid "Implement Granite.Notebook on the Query tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:119 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:149 msgid "Show query error messages inline." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:133 msgid "Because 0.7.6 never happened!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:143 msgid "Query Tab Bonanza!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:155 msgid "New features and improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:157 #, fuzzy msgid "You can now duplicate connections." msgstr "Nombre total de connexions enregistrées." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:158 msgid "" "Sorting columns now works as expected by actually running the ORDER BY query." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:159 msgid "" "Quickly jump to a specific result page with the handy dandy pagination " "popover." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:160 msgid "Show Comment Column inside table structure view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:166 msgid "The 2020 release!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:168 #, fuzzy msgid "Manually reorder saved connection." msgstr "Nombre total de connexions enregistrées." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:169 msgid "Allow selecting a custom SSH public key." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:170 msgid "Fix SSH tunnel crashes." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:176 msgid "Raw Query Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:178 msgid "Strip comments from SQL raw queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:179 msgid "Better handle complex queries on multiple lines." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:180 msgid "Speed up query rendering." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:186 msgid "Sweet Query Tab Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:188 msgid "Edit font size of the Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:189 msgid "Edit background style of the Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:190 msgid "Save and remember the Query Tab size." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:196 msgid "PostgreSQL Fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:198 msgid "Fixed PostgreSQL relationship table." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:199 msgid "Fixed wrong response message when handling non select queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:205 msgid "Bite-Size fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:207 msgid "Removed unused libfixposix." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:208 msgid "Fixed pagination issue when clicking too fast while fetching big data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:214 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:225 msgid "Bug fixes and improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:216 msgid "Rewritten pagination to use LIMIT and OFFSET." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:217 msgid "Faster pagination and content viewing for big data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:218 msgid "Show records count in table's list." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:219 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:252 msgid "Bug fixes and other improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:227 msgid "Properly handle EXPLAIN SQL statement." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:228 msgid "Properly handle querying capitlized PostgreSQL tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:229 msgid "Improved async methods for internal views." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:230 msgid "Updated translations." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:236 msgid "Critical bug fix!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:238 msgid "CRITICAL: Fixes missing GSettings Schema, restore lost connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:239 msgid "Other small bug fixes and improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:245 msgid "Implemented SSH tunneling" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:247 msgid "" "WARNING: This release packs many updates and something could break. Please, " "backup your connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:248 #, fuzzy msgid "Connect via SSH to a remote Database." msgstr "Connectez-vous à une base de données locale ou distante." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:249 msgid "Major code refactor to handle UI updates via async methods." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:250 msgid "" "Use Stack container to show a loading Spinner during fetch or data " "processing methods." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:251 msgid "" "Major performance improvements to the table search and dropdown schema " "switcher." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:258 msgid "Fancy New Icon!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:260 msgid "New fancy Icon." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:261 msgid "Use GtkNativeDialog." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:262 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:272 msgid "Bug fixes and Improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:268 msgid "Open SQLite files" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:270 msgid "Open SQLite files directly in Sequeler." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:271 msgid "Right click to copy data inside a column." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:278 msgid "UI Fixes and Performance Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:280 msgid "UI fix for logout button." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:281 msgid "View shortcuts on preferences dropdown." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:282 msgid "Performance Improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:283 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:351 msgid "Italian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:289 #, fuzzy msgid "Export all the things!" msgstr "Exporter au format Texte" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:291 msgid "Export results from Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:292 msgid "Export in CSV or Plain Text format." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:293 msgid "Sort Columns order everywhere." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:294 msgid "Brazilian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:300 msgid "Here comes the power of Pagination!!!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:302 #, fuzzy msgid "Paginate results in the Content tab." msgstr "Nombre maximum de lignes à afficher dans l'onglet Contenu." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:303 msgid "Query messages UI improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:304 msgid "Relations table bug fixes." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:310 msgid "We got Multi SQL Query support." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:312 #, fuzzy msgid "Ability to handle multiple SQL queries." msgstr "Écrire plusieurs requêtes SQL personnalisées" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:313 msgid "Execute the currently highlighted query." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:314 msgid "Improved Library Popover UI." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:315 msgid "Use native GTK+ CSS attributes for better Light/Dark mode." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:316 msgid "Random UI improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:322 msgid "Urgent! Fixed broken Tabs for translated version." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:327 msgid "Light and Dark Mode Switch!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:329 msgid "Better Dark/Light mode switch in header bar." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:330 msgid "Add Russian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:331 msgid "Updated Welcome screen with New Window command." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:332 msgid "Code cleanup." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:338 msgid "Official Juno release!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:340 msgid "Missing filter name on SQLite File Dialog." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:346 msgid "We got Search!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:348 msgid "Search table names in sidebar." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:349 msgid "Fixes issue in connecting directly on a non saved connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:350 msgid "Updated Lithuanian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:357 msgid "Improved Password Security." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:359 msgid "Safely store passwords in LibSecret." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:360 msgid "Auto upgrade on startup to remove passwords from GSettings." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:361 msgid "" "Fixes issues with identical table names from other database in the same " "connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:362 msgid "Alphabetically ordered tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:363 msgid "Improvements in showing MySql/MariaDB Table Structure." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:364 msgid "Many more bugs for you to discover." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:370 #, fuzzy msgid "New Icon and Import/Export Library." msgstr "Impossible d'importer la bibliothèque " #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:372 msgid "Fancy new icon." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:373 #, fuzzy msgid "Import and Export connections library." msgstr "Importer des connexions" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:374 msgid "Fixed random crash when opening and closing multiple connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:375 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:381 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:393 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:416 msgid "Bug fixes and improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:383 msgid "Fixed PostgreSQL Schema show options." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:384 msgid "" "Fixed crash on new connection dialog when opening the connection before " "saving." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:390 msgid "Little side dish update." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:392 msgid "Fixed save window state on close." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:399 msgid "Alternate coloured rows!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:401 msgid "Manually reload Content, Structure, and Relations." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:402 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:413 #, fuzzy msgid "Show Table schema, content, and constraint relationships." msgstr "Voir la structure, le contenu et les relations des tables" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:403 msgid "Properly handle compound queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:404 msgid "Fix PostgreSQL table switch." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:410 msgid "Complete rewrite of the entire code base!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:412 msgid "Handle multiple Windows/Instances and multiple open connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:414 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:426 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:438 msgid "Quicker response on big select queries" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:415 msgid "Better error handling." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:422 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:434 msgid "Better error handling, less crashes!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:424 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:436 msgid "The app doesn't crash when dealing with big values" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:425 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:437 msgid "Handling errors related to columns" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:427 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:439 msgid "Some small clean up" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:428 msgid "Fixes issue with SQL Lite encrypted path" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:445 msgid "New Icon, Better error messages!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:447 msgid "New shiny icon" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:448 msgid "View SQL error message on error" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:449 msgid "FIX: Show proper PostgreSql Schema Table in Sidebar" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:450 msgid "Snappiest query execution ever for local databases" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:451 msgid "The usual bundle of bugs for you to discover" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:457 msgid "Summoning the power of async methods!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:459 msgid "All DataBase queries are now async methods, super fast." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:460 msgid "The UI doesn't freeze anymore during a long process" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:461 msgid "Granite SourceList to display list of tables" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:462 msgid "Tabs to switch between the Query Builder and the Table Structure" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:463 msgid "ComboBox to select table schemas from the open connection" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:464 msgid "Many more bugs and issues for you to have fun with" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:470 msgid "Bug Fixes and Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:472 msgid "Display Table lists for SQLite and PostgreSQL" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:473 msgid "Refresh Table List view if tables change" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:474 msgid "Removed unused GSettings" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:480 msgid "" "This is so good you won't believe it. New Library UI, Schema Table, Custom " "Port, and more" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:482 msgid "" "A brand new Library View directly in your home screen, super tight and " "organized" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:483 msgid "Custom Port field for those snazzy geeks who don't just use 3306" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:484 msgid "A shiny new Sidebar View to list all your DataBase Tables" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:485 msgid "Code cleanup and speed improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:486 msgid "Usual abundance of bugs and issues for you to have fun with!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:492 msgid "Major Update: Releasing a sweet table to view Query Results!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:494 msgid "Did I say we got a sweet table to view query results?" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:495 msgid "New shortcut (ctrl+enter) to execute query" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:496 msgid "Solved bug while connecting to DB directly from the Connection Dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:497 msgid "UI Improvements to Connection Dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:498 msgid "Added Spanish and Lithuanian translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:504 msgid "UI fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:506 msgid "Visual improvements to the library view" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:512 msgid "Initial Release" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:514 msgid "Store your Database connections" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:515 #, fuzzy msgid "Quickly connect to a Local or Remote Database" msgstr "Connectez-vous à une base de données locale ou distante." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:516 msgid "Write SQL queries in the built-in code editor" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:523 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:527 msgid "Database view" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:531 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:535 msgid "New connection dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:540 msgid "Alessandro Castellani" msgstr "Alessandro Castellani" #~ msgid "Sequeler App" #~ msgstr "Sequeler" #~ msgid "@icon@" #~ msgstr "@icon@" ellie-commons-sequeler-9963fb4/po/extra/ja.po000066400000000000000000000720541512323162700211550ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extra package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: extra\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-12-25 11:37+0000\n" "Last-Translator: Ryo Nakano \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.15.1\n" #: data/io.github.ellie_commons.sequeler.desktop.in.in:6 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:7 msgid "Sequeler" msgstr "Sequeler" #: data/io.github.ellie_commons.sequeler.desktop.in.in:7 msgid "SQL Client" msgstr "SQL クライアント" #: data/io.github.ellie_commons.sequeler.desktop.in.in:8 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:10 msgid "Easily connect to your local or remote database" msgstr "ローカルã¾ãŸã¯ãƒªãƒ¢ãƒ¼ãƒˆã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ç°¡å˜ã«æŽ¥ç¶šã—ã¾ã™" #: data/io.github.ellie_commons.sequeler.desktop.in.in:13 msgid "SQL;MySql;Database;MariaDB;S3;PostgreSQL;" msgstr "SQL;MySql;Database;MariaDB;S3;PostgreSQL;データベース;" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:8 msgid "Friendly SQL Client" msgstr "フレンドリー㪠SQL クライアント" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:13 msgid "" "Store your Database Connections in the library, connect over SSH tunnel, " "type and execute SQL commands directly in the app, and do everything you " "need to do without the necessity of opening the terminal." msgstr "" "データベースã¸ã®æŽ¥ç¶šæƒ…報をライブラリã«ä¿å­˜ã—ãŸã‚Šã€SSH トンãƒãƒ«çµŒç”±ã§æŽ¥ç¶šã—ãŸ" "りã€SQL コマンドをアプリ内ã§ç›´æŽ¥å…¥åŠ›ãƒ»å®Ÿè¡Œã—ãŸã‚Šã€‚å¿…è¦ãªã“ã¨ã¯ã™ã¹ã¦ã€ã‚¿ãƒ¼ãƒŸ" "ナルを開ã‹ãšã«å®Œçµã—ã¾ã™ã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:16 msgid "Supported Databases:" msgstr "対応ã—ã¦ã„るデータベース:" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:20 msgid "SQLite" msgstr "SQLite" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:21 msgid "MySQL" msgstr "MySQL" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:22 msgid "MariaDB" msgstr "MariaDB" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:23 msgid "PostgreSQL" msgstr "PostgreSQL" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:25 msgid "Features Include:" msgstr "å«ã¾ã‚Œã‚‹æ©Ÿèƒ½:" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:29 msgid "Test Connections before saving them" msgstr "ä¿å­˜å‰ã®æŽ¥ç¶šç¢ºèª" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:30 msgid "View Table structure, content, and relations" msgstr "ãƒ†ãƒ¼ãƒ–ãƒ«ã®æ§‹é€ ãƒ»å†…容・リレーションã®è¡¨ç¤º" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:31 msgid "Write multiple custom SQL Queries" msgstr "カスタム SQL クエリã®è¤‡æ•°è¨˜è¿°" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:32 msgid "Switch between light and dark mode" msgstr "ライトモードã¨ãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰ã®åˆ‡ã‚Šæ›¿ãˆ" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:33 msgid "" "Handy keyboard shortcuts to quit (ctrl+q), create new connection " "(ctrl+shift+n), open a new window (ctrl+n)" msgstr "" "便利ãªã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆ: 終了 (Ctrl+Q)ã€æ–°ã—ã„æŽ¥ç¶šã‚’ä½œæˆ " "(Ctrl+Shift+N)ã€æ–°ã—ã„ウィンドウを開ã (Ctrl+N)" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:43 msgid "Fix translations are not loaded in Flatpak" msgstr "Flatpak 版ã«ãŠã„ã¦ç¿»è¨³ãŒèª­ã¿è¾¼ã¾ã‚Œãªã„å•題を修正" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:44 msgid "Modernize the UI to fall in line with modern desktop environments" msgstr "最近ã®ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—環境ã«åˆã†ã‚ˆã†ã« UI をモダン化" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:45 msgid "Update Flatpak platform runtime and modules" msgstr "Flatpak プラットフォームランタイムã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æ›´æ–°" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:46 msgid "Update translations" msgstr "翻訳を更新" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:61 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:70 msgid "Odin release" msgstr "Odin リリース" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:63 msgid "Update elementary OS Platform runtime." msgstr "elementary OS プラットフォームランタイムを更新ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:64 msgid "Update screenshots." msgstr "スクリーンショットを更新ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:72 msgid "" "Updated translations for Ukranian, Russian, Indonisian, Chinese, Lithuanian, " "Portugese, Turkish, and Arabic." msgstr "" "ウクライナ語ã€ãƒ­ã‚·ã‚¢èªžã€ã‚¤ãƒ³ãƒ‰ãƒã‚·ã‚¢èªžã€ä¸­å›½èªžã€ãƒªãƒˆã‚¢ãƒ‹ã‚¢èªžã€ãƒãƒ«ãƒˆã‚¬ãƒ«èªžã€" "トルコ語ã€ã‚¢ãƒ©ãƒ“ア語ã®ç¿»è¨³ã‚’æ›´æ–°ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:78 msgid "New Features" msgstr "新機能" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:80 msgid "Create, Edit, and Delete databases." msgstr "データベースを作æˆã€ç·¨é›†ã€å‰Šé™¤ã™ã‚‹æ©Ÿèƒ½ã‚’追加ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:81 msgid "New context menu to copy and edit tables." msgstr "テーブルをコピー/編集ã§ãるコンテキストメニューを追加ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:82 msgid "Support unencrypted connections." msgstr "æš—å·åŒ–ã•れã¦ã„ãªã„接続ã«å¯¾å¿œã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:84 msgid "Bug Fixes" msgstr "ãƒã‚°ä¿®æ­£" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:86 msgid "Fix copy column data." msgstr "カラムデータã®ã‚³ãƒ”ーã«é–¢ã™ã‚‹ä¸å…·åˆã‚’修正ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:88 msgid "Translations" msgstr "翻訳" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:90 msgid "Updated translations for Ukranian, Russian, French, and German." msgstr "ウクライナ語ã€ãƒ­ã‚·ã‚¢èªžã€ãƒ•ランス語ã€ãƒ‰ã‚¤ãƒ„語ã®ç¿»è¨³ã‚’æ›´æ–°ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:96 msgid "Reduced CPU usage by 2%." msgstr "CPU 使用é‡ã‚’ 2% 削減ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:97 msgid "" "Update translations for Italian, Spanish, Catalan, French, Hindi, Russian, " "and Turkish." msgstr "" "イタリア語ã€ã‚¹ãƒšã‚¤ãƒ³èªžã€ã‚«ã‚¿ãƒ­ãƒ‹ã‚¢èªžã€ãƒ•ランス語ã€ãƒ’ンディー語ã€ãƒ­ã‚·ã‚¢èªžã€" "トルコ語ã®ç¿»è¨³ã‚’æ›´æ–°ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:102 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:125 msgid "More fixes!" msgstr "追加ã®ãƒã‚°ä¿®æ­£!" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:103 msgid "0.7.8 changelog" msgstr "0.7.8 ã®å¤‰æ›´å±¥æ­´" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:105 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:127 msgid "Fixed usage attempt of wrong Vala method." msgstr "é–“é•ã£ãŸ Vala 言語ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使ãŠã†ã¨ã—ã¦ã„ãŸå•題を修正ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:107 msgid "0.7.7 changelog" msgstr "0.7.7 ã®å¤‰æ›´å±¥æ­´" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:109 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:135 msgid "Fix nasty GSettings bug causing the app to crash." msgstr "アプリをクラッシュã•ã›ã‚‹ã‚„ã£ã‹ã„㪠GSettings 関連ã®ãƒã‚°ã‚’修正ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:110 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:136 msgid "Implement GDA Placeholder statement." msgstr "GDA ã®ãƒ—レースホルダーステートメントを実装ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:111 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:137 msgid "Improve Query Tab iconography." msgstr "クエリタブã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’改善ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:113 msgid "0.7.6 changelog" msgstr "0.7.6 ã®å¤‰æ›´å±¥æ­´" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:115 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:145 msgid "Fix ORDER BY in PostgreSQL Relationship view." msgstr "PostgreSQL ã®ãƒªãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚·ãƒƒãƒ—ç”»é¢ã«ãŠã‘ã‚‹ ORDER BY を修正ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:116 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:146 msgid "Improve MySQL structure view." msgstr "MySQL ã®æ§‹é€ ç”»é¢ã‚’改善ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:117 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:147 msgid "Drop Granite.Settings in favour of GLib.Settings." msgstr "Granite.Settings ã®ä½¿ç”¨ã‚’åœæ­¢ã—ã€GLib.Settings ã«ç½®ãæ›ãˆã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:118 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:148 msgid "Implement Granite.Notebook on the Query tab." msgstr "クエリタブ㫠Granite.Notebook を実装ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:119 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:149 msgid "Show query error messages inline." msgstr "クエリã®ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’インラインã§è¡¨ç¤ºã™ã‚‹ã‚ˆã†ã«ä¿®æ­£ã—ã¾ã—ãŸã€‚" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:133 msgid "Because 0.7.6 never happened!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:143 msgid "Query Tab Bonanza!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:155 msgid "New features and improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:157 msgid "You can now duplicate connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:158 msgid "" "Sorting columns now works as expected by actually running the ORDER BY query." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:159 msgid "" "Quickly jump to a specific result page with the handy dandy pagination " "popover." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:160 msgid "Show Comment Column inside table structure view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:166 msgid "The 2020 release!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:168 msgid "Manually reorder saved connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:169 msgid "Allow selecting a custom SSH public key." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:170 msgid "Fix SSH tunnel crashes." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:176 msgid "Raw Query Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:178 msgid "Strip comments from SQL raw queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:179 msgid "Better handle complex queries on multiple lines." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:180 msgid "Speed up query rendering." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:186 msgid "Sweet Query Tab Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:188 msgid "Edit font size of the Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:189 msgid "Edit background style of the Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:190 msgid "Save and remember the Query Tab size." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:196 msgid "PostgreSQL Fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:198 msgid "Fixed PostgreSQL relationship table." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:199 msgid "Fixed wrong response message when handling non select queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:205 msgid "Bite-Size fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:207 msgid "Removed unused libfixposix." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:208 msgid "Fixed pagination issue when clicking too fast while fetching big data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:214 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:225 msgid "Bug fixes and improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:216 msgid "Rewritten pagination to use LIMIT and OFFSET." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:217 msgid "Faster pagination and content viewing for big data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:218 msgid "Show records count in table's list." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:219 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:252 msgid "Bug fixes and other improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:227 msgid "Properly handle EXPLAIN SQL statement." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:228 msgid "Properly handle querying capitlized PostgreSQL tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:229 msgid "Improved async methods for internal views." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:230 msgid "Updated translations." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:236 msgid "Critical bug fix!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:238 msgid "CRITICAL: Fixes missing GSettings Schema, restore lost connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:239 msgid "Other small bug fixes and improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:245 msgid "Implemented SSH tunneling" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:247 msgid "" "WARNING: This release packs many updates and something could break. Please, " "backup your connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:248 msgid "Connect via SSH to a remote Database." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:249 msgid "Major code refactor to handle UI updates via async methods." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:250 msgid "" "Use Stack container to show a loading Spinner during fetch or data " "processing methods." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:251 msgid "" "Major performance improvements to the table search and dropdown schema " "switcher." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:258 msgid "Fancy New Icon!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:260 msgid "New fancy Icon." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:261 msgid "Use GtkNativeDialog." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:262 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:272 msgid "Bug fixes and Improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:268 msgid "Open SQLite files" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:270 msgid "Open SQLite files directly in Sequeler." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:271 msgid "Right click to copy data inside a column." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:278 msgid "UI Fixes and Performance Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:280 msgid "UI fix for logout button." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:281 msgid "View shortcuts on preferences dropdown." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:282 msgid "Performance Improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:283 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:351 msgid "Italian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:289 msgid "Export all the things!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:291 msgid "Export results from Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:292 msgid "Export in CSV or Plain Text format." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:293 msgid "Sort Columns order everywhere." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:294 msgid "Brazilian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:300 msgid "Here comes the power of Pagination!!!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:302 msgid "Paginate results in the Content tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:303 msgid "Query messages UI improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:304 msgid "Relations table bug fixes." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:310 msgid "We got Multi SQL Query support." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:312 msgid "Ability to handle multiple SQL queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:313 msgid "Execute the currently highlighted query." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:314 msgid "Improved Library Popover UI." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:315 msgid "Use native GTK+ CSS attributes for better Light/Dark mode." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:316 msgid "Random UI improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:322 msgid "Urgent! Fixed broken Tabs for translated version." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:327 msgid "Light and Dark Mode Switch!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:329 msgid "Better Dark/Light mode switch in header bar." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:330 msgid "Add Russian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:331 msgid "Updated Welcome screen with New Window command." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:332 msgid "Code cleanup." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:338 msgid "Official Juno release!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:340 msgid "Missing filter name on SQLite File Dialog." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:346 msgid "We got Search!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:348 msgid "Search table names in sidebar." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:349 msgid "Fixes issue in connecting directly on a non saved connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:350 msgid "Updated Lithuanian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:357 msgid "Improved Password Security." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:359 msgid "Safely store passwords in LibSecret." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:360 msgid "Auto upgrade on startup to remove passwords from GSettings." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:361 msgid "" "Fixes issues with identical table names from other database in the same " "connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:362 msgid "Alphabetically ordered tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:363 msgid "Improvements in showing MySql/MariaDB Table Structure." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:364 msgid "Many more bugs for you to discover." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:370 msgid "New Icon and Import/Export Library." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:372 msgid "Fancy new icon." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:373 msgid "Import and Export connections library." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:374 msgid "Fixed random crash when opening and closing multiple connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:375 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:381 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:393 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:416 msgid "Bug fixes and improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:383 msgid "Fixed PostgreSQL Schema show options." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:384 msgid "" "Fixed crash on new connection dialog when opening the connection before " "saving." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:390 msgid "Little side dish update." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:392 msgid "Fixed save window state on close." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:399 msgid "Alternate coloured rows!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:401 msgid "Manually reload Content, Structure, and Relations." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:402 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:413 msgid "Show Table schema, content, and constraint relationships." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:403 msgid "Properly handle compound queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:404 msgid "Fix PostgreSQL table switch." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:410 msgid "Complete rewrite of the entire code base!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:412 msgid "Handle multiple Windows/Instances and multiple open connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:414 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:426 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:438 msgid "Quicker response on big select queries" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:415 msgid "Better error handling." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:422 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:434 msgid "Better error handling, less crashes!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:424 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:436 msgid "The app doesn't crash when dealing with big values" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:425 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:437 msgid "Handling errors related to columns" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:427 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:439 msgid "Some small clean up" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:428 msgid "Fixes issue with SQL Lite encrypted path" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:445 msgid "New Icon, Better error messages!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:447 msgid "New shiny icon" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:448 msgid "View SQL error message on error" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:449 msgid "FIX: Show proper PostgreSql Schema Table in Sidebar" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:450 msgid "Snappiest query execution ever for local databases" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:451 msgid "The usual bundle of bugs for you to discover" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:457 msgid "Summoning the power of async methods!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:459 msgid "All DataBase queries are now async methods, super fast." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:460 msgid "The UI doesn't freeze anymore during a long process" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:461 msgid "Granite SourceList to display list of tables" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:462 msgid "Tabs to switch between the Query Builder and the Table Structure" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:463 msgid "ComboBox to select table schemas from the open connection" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:464 msgid "Many more bugs and issues for you to have fun with" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:470 msgid "Bug Fixes and Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:472 msgid "Display Table lists for SQLite and PostgreSQL" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:473 msgid "Refresh Table List view if tables change" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:474 msgid "Removed unused GSettings" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:480 msgid "" "This is so good you won't believe it. New Library UI, Schema Table, Custom " "Port, and more" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:482 msgid "" "A brand new Library View directly in your home screen, super tight and " "organized" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:483 msgid "Custom Port field for those snazzy geeks who don't just use 3306" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:484 msgid "A shiny new Sidebar View to list all your DataBase Tables" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:485 msgid "Code cleanup and speed improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:486 msgid "Usual abundance of bugs and issues for you to have fun with!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:492 msgid "Major Update: Releasing a sweet table to view Query Results!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:494 msgid "Did I say we got a sweet table to view query results?" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:495 msgid "New shortcut (ctrl+enter) to execute query" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:496 msgid "Solved bug while connecting to DB directly from the Connection Dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:497 msgid "UI Improvements to Connection Dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:498 msgid "Added Spanish and Lithuanian translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:504 msgid "UI fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:506 msgid "Visual improvements to the library view" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:512 msgid "Initial Release" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:514 msgid "Store your Database connections" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:515 msgid "Quickly connect to a Local or Remote Database" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:516 msgid "Write SQL queries in the built-in code editor" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:523 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:527 msgid "Database view" msgstr "データベース画é¢" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:531 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:535 msgid "New connection dialog" msgstr "æ–°ã—ã„æŽ¥ç¶šãƒ€ã‚¤ã‚¢ãƒ­ã‚°" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:540 msgid "Alessandro Castellani" msgstr "Alessandro Castellani" ellie-commons-sequeler-9963fb4/po/extra/lt.po000066400000000000000000000670371512323162700212070ustar00rootroot00000000000000# Lithuanian translations for extra package. # Copyright (C) 2020 THE extra'S COPYRIGHT HOLDER # This file is distributed under the same license as the extra package. # Moo, 2020. # msgid "" msgstr "" "Project-Id-Version: extra\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2020-04-11 12:12+0200\n" "Last-Translator: Moo\n" "Language-Team: none\n" "Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "(n%100<10 || n%100>=20) ? 1 : 2);\n" #: data/io.github.ellie_commons.sequeler.desktop.in.in:6 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:7 msgid "Sequeler" msgstr "Sequeler" #: data/io.github.ellie_commons.sequeler.desktop.in.in:7 #, fuzzy #| msgid "Friendly SQL Client" msgid "SQL Client" msgstr "DraugiÅ¡ka SQL kliento programa" #: data/io.github.ellie_commons.sequeler.desktop.in.in:8 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:10 msgid "Easily connect to your local or remote database" msgstr "" "Lengvai prisijunkite prie bet kurios vietinÄ—s ar nuotolinÄ—s duomenų bazÄ—s" #: data/io.github.ellie_commons.sequeler.desktop.in.in:13 msgid "SQL;MySql;Database;MariaDB;S3;PostgreSQL;" msgstr "SQL;MySql;Database;MariaDB;S3;PostgreSQL;" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:8 msgid "Friendly SQL Client" msgstr "DraugiÅ¡ka SQL kliento programa" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:13 #, fuzzy msgid "" "Store your Database Connections in the library, connect over SSH tunnel, " "type and execute SQL commands directly in the app, and do everything you " "need to do without the necessity of opening the terminal." msgstr "" "Laikykite savo duomenų bazių ryÅ¡ius įtaisytoje bibliotekoje, tiesiogiai " "programoje raÅ¡ykite ir vykdykite SQL komandas ir atlikite viskÄ…, kÄ… reikia " "be bÅ«tinybÄ—s atverti terminalÄ…." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:16 msgid "Supported Databases:" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:20 msgid "SQLite" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:21 msgid "MySQL" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:22 msgid "MariaDB" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:23 msgid "PostgreSQL" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:25 msgid "Features Include:" msgstr "YpatybÄ—s:" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:29 msgid "Test Connections before saving them" msgstr "PrieÅ¡ įraÅ¡ant ryÅ¡ius, juos iÅ¡bandyti" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:30 msgid "View Table structure, content, and relations" msgstr "Rodyti lentelÄ—s struktÅ«rÄ…, turinį ir sÄ…sajos ryÅ¡ius" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:31 msgid "Write multiple custom SQL Queries" msgstr "RaÅ¡yti keletÄ… tinkintų SQL užklausų" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:32 msgid "Switch between light and dark mode" msgstr "Perjungti tarp Å¡viesios ir tamsios veiksenos" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:33 #, fuzzy msgid "" "Handy keyboard shortcuts to quit (ctrl+q), create new connection " "(ctrl+shift+n), open a new window (ctrl+n)" msgstr "" "PatogÅ«s klaviatÅ«ros susiejimai, norint iÅ¡eiti (ctrl (vald)+q), sukurti naujÄ… " "ryšį (ctrl (vald)+shift (lyg2)+n), keli egzemplioriai (ctrl (vald)+n)" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:43 msgid "Fix translations are not loaded in Flatpak" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:44 msgid "Modernize the UI to fall in line with modern desktop environments" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:45 msgid "Update Flatpak platform runtime and modules" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:46 msgid "Update translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:61 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:70 msgid "Odin release" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:63 msgid "Update elementary OS Platform runtime." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:64 msgid "Update screenshots." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:72 msgid "" "Updated translations for Ukranian, Russian, Indonisian, Chinese, Lithuanian, " "Portugese, Turkish, and Arabic." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:78 msgid "New Features" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:80 msgid "Create, Edit, and Delete databases." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:81 msgid "New context menu to copy and edit tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:82 #, fuzzy msgid "Support unencrypted connections." msgstr "Bendras įraÅ¡ytų ryÅ¡ių skaiÄius." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:84 msgid "Bug Fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:86 msgid "Fix copy column data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:88 msgid "Translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:90 msgid "Updated translations for Ukranian, Russian, French, and German." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:96 msgid "Reduced CPU usage by 2%." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:97 msgid "" "Update translations for Italian, Spanish, Catalan, French, Hindi, Russian, " "and Turkish." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:102 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:125 msgid "More fixes!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:103 msgid "0.7.8 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:105 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:127 msgid "Fixed usage attempt of wrong Vala method." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:107 msgid "0.7.7 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:109 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:135 msgid "Fix nasty GSettings bug causing the app to crash." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:110 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:136 msgid "Implement GDA Placeholder statement." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:111 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:137 msgid "Improve Query Tab iconography." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:113 msgid "0.7.6 changelog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:115 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:145 msgid "Fix ORDER BY in PostgreSQL Relationship view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:116 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:146 msgid "Improve MySQL structure view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:117 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:147 msgid "Drop Granite.Settings in favour of GLib.Settings." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:118 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:148 msgid "Implement Granite.Notebook on the Query tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:119 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:149 msgid "Show query error messages inline." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:133 msgid "Because 0.7.6 never happened!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:143 msgid "Query Tab Bonanza!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:155 msgid "New features and improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:157 #, fuzzy msgid "You can now duplicate connections." msgstr "Bendras įraÅ¡ytų ryÅ¡ių skaiÄius." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:158 msgid "" "Sorting columns now works as expected by actually running the ORDER BY query." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:159 msgid "" "Quickly jump to a specific result page with the handy dandy pagination " "popover." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:160 msgid "Show Comment Column inside table structure view." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:166 msgid "The 2020 release!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:168 #, fuzzy msgid "Manually reorder saved connection." msgstr "Bendras įraÅ¡ytų ryÅ¡ių skaiÄius." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:169 msgid "Allow selecting a custom SSH public key." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:170 msgid "Fix SSH tunnel crashes." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:176 msgid "Raw Query Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:178 msgid "Strip comments from SQL raw queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:179 msgid "Better handle complex queries on multiple lines." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:180 msgid "Speed up query rendering." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:186 msgid "Sweet Query Tab Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:188 msgid "Edit font size of the Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:189 msgid "Edit background style of the Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:190 msgid "Save and remember the Query Tab size." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:196 msgid "PostgreSQL Fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:198 msgid "Fixed PostgreSQL relationship table." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:199 msgid "Fixed wrong response message when handling non select queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:205 msgid "Bite-Size fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:207 msgid "Removed unused libfixposix." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:208 msgid "Fixed pagination issue when clicking too fast while fetching big data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:214 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:225 msgid "Bug fixes and improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:216 msgid "Rewritten pagination to use LIMIT and OFFSET." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:217 msgid "Faster pagination and content viewing for big data." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:218 msgid "Show records count in table's list." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:219 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:252 msgid "Bug fixes and other improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:227 msgid "Properly handle EXPLAIN SQL statement." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:228 msgid "Properly handle querying capitlized PostgreSQL tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:229 msgid "Improved async methods for internal views." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:230 msgid "Updated translations." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:236 msgid "Critical bug fix!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:238 msgid "CRITICAL: Fixes missing GSettings Schema, restore lost connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:239 msgid "Other small bug fixes and improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:245 msgid "Implemented SSH tunneling" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:247 msgid "" "WARNING: This release packs many updates and something could break. Please, " "backup your connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:248 #, fuzzy msgid "Connect via SSH to a remote Database." msgstr "Prisijunkite prie bet kurios vietinÄ—s ar nuotolinÄ—s duomenų bazÄ—s." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:249 msgid "Major code refactor to handle UI updates via async methods." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:250 msgid "" "Use Stack container to show a loading Spinner during fetch or data " "processing methods." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:251 msgid "" "Major performance improvements to the table search and dropdown schema " "switcher." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:258 msgid "Fancy New Icon!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:260 msgid "New fancy Icon." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:261 msgid "Use GtkNativeDialog." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:262 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:272 msgid "Bug fixes and Improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:268 msgid "Open SQLite files" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:270 msgid "Open SQLite files directly in Sequeler." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:271 msgid "Right click to copy data inside a column." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:278 msgid "UI Fixes and Performance Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:280 msgid "UI fix for logout button." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:281 msgid "View shortcuts on preferences dropdown." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:282 msgid "Performance Improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:283 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:351 msgid "Italian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:289 #, fuzzy msgid "Export all the things!" msgstr "Eksportuoti kaip tekstÄ…" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:291 msgid "Export results from Query Tab." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:292 msgid "Export in CSV or Plain Text format." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:293 msgid "Sort Columns order everywhere." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:294 msgid "Brazilian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:300 msgid "Here comes the power of Pagination!!!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:302 #, fuzzy msgid "Paginate results in the Content tab." msgstr "Daugiausiai turinio kortelÄ—je rodoma eiluÄių." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:303 msgid "Query messages UI improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:304 msgid "Relations table bug fixes." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:310 msgid "We got Multi SQL Query support." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:312 #, fuzzy msgid "Ability to handle multiple SQL queries." msgstr "RaÅ¡yti keletÄ… tinkintų SQL užklausų" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:313 msgid "Execute the currently highlighted query." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:314 msgid "Improved Library Popover UI." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:315 msgid "Use native GTK+ CSS attributes for better Light/Dark mode." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:316 msgid "Random UI improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:322 msgid "Urgent! Fixed broken Tabs for translated version." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:327 msgid "Light and Dark Mode Switch!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:329 msgid "Better Dark/Light mode switch in header bar." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:330 msgid "Add Russian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:331 msgid "Updated Welcome screen with New Window command." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:332 msgid "Code cleanup." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:338 msgid "Official Juno release!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:340 msgid "Missing filter name on SQLite File Dialog." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:346 msgid "We got Search!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:348 msgid "Search table names in sidebar." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:349 msgid "Fixes issue in connecting directly on a non saved connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:350 msgid "Updated Lithuanian translation." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:357 msgid "Improved Password Security." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:359 msgid "Safely store passwords in LibSecret." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:360 msgid "Auto upgrade on startup to remove passwords from GSettings." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:361 msgid "" "Fixes issues with identical table names from other database in the same " "connection." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:362 msgid "Alphabetically ordered tables." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:363 msgid "Improvements in showing MySql/MariaDB Table Structure." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:364 msgid "Many more bugs for you to discover." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:370 #, fuzzy msgid "New Icon and Import/Export Library." msgstr "Nepavyko importuoti bibliotekos " #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:372 msgid "Fancy new icon." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:373 #, fuzzy msgid "Import and Export connections library." msgstr "Importuoti ryÅ¡ius" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:374 msgid "Fixed random crash when opening and closing multiple connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:375 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:381 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:393 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:416 msgid "Bug fixes and improvements." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:383 msgid "Fixed PostgreSQL Schema show options." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:384 msgid "" "Fixed crash on new connection dialog when opening the connection before " "saving." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:390 msgid "Little side dish update." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:392 msgid "Fixed save window state on close." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:399 msgid "Alternate coloured rows!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:401 msgid "Manually reload Content, Structure, and Relations." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:402 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:413 #, fuzzy msgid "Show Table schema, content, and constraint relationships." msgstr "Rodyti lentelÄ—s struktÅ«rÄ…, turinį ir sÄ…sajos ryÅ¡ius" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:403 msgid "Properly handle compound queries." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:404 msgid "Fix PostgreSQL table switch." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:410 msgid "Complete rewrite of the entire code base!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:412 msgid "Handle multiple Windows/Instances and multiple open connections." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:414 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:426 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:438 msgid "Quicker response on big select queries" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:415 msgid "Better error handling." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:422 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:434 msgid "Better error handling, less crashes!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:424 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:436 msgid "The app doesn't crash when dealing with big values" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:425 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:437 msgid "Handling errors related to columns" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:427 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:439 msgid "Some small clean up" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:428 msgid "Fixes issue with SQL Lite encrypted path" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:445 msgid "New Icon, Better error messages!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:447 msgid "New shiny icon" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:448 msgid "View SQL error message on error" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:449 msgid "FIX: Show proper PostgreSql Schema Table in Sidebar" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:450 msgid "Snappiest query execution ever for local databases" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:451 msgid "The usual bundle of bugs for you to discover" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:457 msgid "Summoning the power of async methods!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:459 msgid "All DataBase queries are now async methods, super fast." msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:460 msgid "The UI doesn't freeze anymore during a long process" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:461 msgid "Granite SourceList to display list of tables" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:462 msgid "Tabs to switch between the Query Builder and the Table Structure" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:463 msgid "ComboBox to select table schemas from the open connection" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:464 msgid "Many more bugs and issues for you to have fun with" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:470 msgid "Bug Fixes and Improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:472 msgid "Display Table lists for SQLite and PostgreSQL" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:473 msgid "Refresh Table List view if tables change" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:474 msgid "Removed unused GSettings" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:480 msgid "" "This is so good you won't believe it. New Library UI, Schema Table, Custom " "Port, and more" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:482 msgid "" "A brand new Library View directly in your home screen, super tight and " "organized" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:483 msgid "Custom Port field for those snazzy geeks who don't just use 3306" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:484 msgid "A shiny new Sidebar View to list all your DataBase Tables" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:485 msgid "Code cleanup and speed improvements" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:486 msgid "Usual abundance of bugs and issues for you to have fun with!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:492 msgid "Major Update: Releasing a sweet table to view Query Results!" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:494 msgid "Did I say we got a sweet table to view query results?" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:495 msgid "New shortcut (ctrl+enter) to execute query" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:496 msgid "Solved bug while connecting to DB directly from the Connection Dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:497 msgid "UI Improvements to Connection Dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:498 msgid "Added Spanish and Lithuanian translations" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:504 msgid "UI fixes" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:506 msgid "Visual improvements to the library view" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:512 msgid "Initial Release" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:514 msgid "Store your Database connections" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:515 #, fuzzy msgid "Quickly connect to a Local or Remote Database" msgstr "Prisijunkite prie bet kurios vietinÄ—s ar nuotolinÄ—s duomenų bazÄ—s." #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:516 msgid "Write SQL queries in the built-in code editor" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:523 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:527 msgid "Database view" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:531 #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:535 msgid "New connection dialog" msgstr "" #: data/io.github.ellie_commons.sequeler.metainfo.xml.in.in:540 msgid "Alessandro Castellani" msgstr "Alessandro Castellani" #~ msgid "Sequeler App" #~ msgstr "Sequeler programa" #~ msgid "@icon@" #~ msgstr "@icon@" ellie-commons-sequeler-9963fb4/po/extra/meson.build000066400000000000000000000002201512323162700223470ustar00rootroot00000000000000i18n.gettext('extra', args: [ '--directory=' + meson.project_source_root(), '--from-code=UTF-8' ], install: false ) ellie-commons-sequeler-9963fb4/po/fr.po000066400000000000000000000405611512323162700200450ustar00rootroot00000000000000# French translations for io.github.ellie_commons.sequeler package. # Copyright (C) 2020 THE io.github.ellie_commons.sequeler'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # NathanBnm, 2020. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-12-25 12:28+0000\n" "Last-Translator: Stella and Charlie \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.15.1\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Les dossiers ne sont pas pris en charge" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Qu'est-ce qu'il s'est passé ?" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Quelque chose de complètement inattendu est survenu" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Déconnexion" #: src/Layouts/HeaderBar.vala:56 msgid "Create a new database" msgstr "Créer une nouvelle base de données" #: src/Layouts/HeaderBar.vala:65 msgid "Delete database" msgstr "Supprimer base de données" #: src/Layouts/HeaderBar.vala:74 msgid "Database properties" msgstr "Propriétés de la base de données" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Nouvelle fenêtre" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Nouvelle connexion" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Quitter" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Menu" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Connecté à %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "CONNEXIONS SAUVEGARDÉES" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Tout supprimer" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Recharger la bibliothèque" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Exporter la bibliothèque" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Êtes-vous sûr·e de vouloir continuer ?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "" "En supprimant cette connexion, vous ne pourrez plus récupérer ces données." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Oui, supprimer !" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "" "Toutes les données seront supprimées et vous ne pourrez plus les récupérer." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Oui, tout supprimer !" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "Un nom d'utilisateur est nécessaire pour pouvoir se connecter !" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Choisissez un fichier" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Enregistrer" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_Annuler" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "Impossible de se connecter à %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Impossible d'exporter la bibliothèque " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Bienvenue dans Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "Connectez-vous à une base de données locale ou distante." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Ajouter une nouvelle base de données" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "" "Connectez-vous à une base de données et enregistrez-la dans votre " "bibliothèque" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Ouvrir une nouvelle fenêtre Sequeler" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Importer des connexions" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Importer des connexions de Sequeler précédemment exportées" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Sélectionner un fichier" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Ouvrir" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Impossible d'importer la bibliothèque " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Rechercher des tables" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Rechercher des tables…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Recharger les tables" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Ajouter une table" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Sélectionner une base de données -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "TABLES" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Structure" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "Contenu" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "Relations" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Requête" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Zoom arrière" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "Zoom 1:1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Zoom avant" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Contraste élevé" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Solarisé clair" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Solarisé sombre" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Modifier l'apparence du texte" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Créer un nouvel onglet de requête" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Requête %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Sélectionner une table" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "" "Sélectionnez une table dans la barre latérale de gauche pour activer cette " "vue." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Aucun résultat disponible" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Recharger les résultats" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " Champs" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Page précédente" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Page suivante" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d pages" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Aller à la page…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 page" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d pages sur %d" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d entrées" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " Contraintes" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Exécution de la requête…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Exporter les résultats" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "Exporter au format CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Exporter au format Texte" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Impossible de traiter la requête !" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d résultats au total" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Requête exécutée avec succès ! Lignes affectées : %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Requête exécutée !" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Exécuter la requête" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "Se connecter" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Modifier la connexion" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Dupliquer la connexion" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Supprimer la connexion" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Options" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Erreur" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "sur la colonne" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Copier %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (copie)" #: src/Services/ActionManager.vala:254 msgid "Are you sure you want to delete this Database?" msgstr "Êtes-vous sûr·e de vouloir supprimer cette base de données ?" #: src/Services/ActionManager.vala:254 msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "" "Toutes les tables et données seront supprimées et vous ne pourrez plus les " "récupérer." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "L'initialisation de libssh2 à échoué (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Échec de l'ouverture du socket" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "Échec de la connexion !" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "Erreur lors du lancement de la session SSH : %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "Échec de l'authentification par mot de passe !" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "Échec de l'authentification par clé publique !" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Aucune méthode d'authentification pris en charge trouvée !" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Échec de l'ouverture de la liste des sockets" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "Échec de la liaison. Votre port de connexion peut être incorrect !" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "Échec de la récupération !" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Échec d'autorisation de la connexion distante !" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "Impossible d'ouvrir le canal direct-tcpip ! (Notez que cela peut être un " "problème lié au serveur ! Veuillez consulter les journaux du serveur.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Erreur !" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "Fichier de clé SSH manquant !" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "Fichier de clé SSH publique manquant !" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "Connexion" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Sélectionner la couleur de la connexion" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Nom de la connexion :" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Nom de la connexion" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Type de base de données :" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Hôte :" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Nom de la base de données :" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Nom d'utilisateur :" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Mot de passe :" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Afficher le mot de passe" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Masquer le mot de passe" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Port :" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "Utiliser SSL :" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Chemin du fichier :" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Sélectionnez votre fichier SQLite…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "Se connecter via un tunnel SSH :" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "Hôte SSH :" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "Nom d'utilisateur SSH :" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "Mot de passe SSH :" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "Port SSH :" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Facultatif" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "Identité SSH" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Sélectionnez votre fichier d'identité…" #: src/Widgets/ConnectionDialog.vala:332 msgid "SSH Public Key" msgstr "Clé SSH publique" #: src/Widgets/ConnectionDialog.vala:334 msgid "Select Your Public Key File…" msgstr "Sélectionnez votre fichier de clé publique…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Générer une clé SSH" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "Tunnel SSH" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Fermer" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Enregistrer la connexion" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Tester la connexion" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Ouverture du tunnel SSH…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "Test de connexion…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "Connexion établie !" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "Enregistrement de la connexion…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "Connexion enregistrée !" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "Connexion en cours…" #~ msgid "Light background" #~ msgstr "Thème clair" #~ msgid "Dark background" #~ msgstr "Thème sombre" ellie-commons-sequeler-9963fb4/po/hi.po000066400000000000000000000505251512323162700200370ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2020-04-27 09:11+0000\n" "Last-Translator: abhishek maurya \n" "Language-Team: Hindi \n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.0.2-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "पथ(सà¥à¤¥à¤¾à¤¨) समरà¥à¤¥à¤¿à¤¤ नहीं है" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "पता नहीं कà¥à¤¯à¤¾ करना है" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "कà¥à¤› पूरà¥à¤£à¤¤à¤¯à¤¾ अपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ हà¥à¤† है" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "पà¥à¤°à¤¸à¥à¤¥à¤¾à¤¨ करे" #: src/Layouts/HeaderBar.vala:56 #, fuzzy #| msgid "Create a new Query Tab" msgid "Create a new database" msgstr "à¤à¤• नया कà¥à¤µà¥‡à¤°à¥€ टैब बनाà¤à¤" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- डेटाबेस का चयन करें -" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "डेटाबेस पà¥à¤°à¤•ार:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "नया विंडो" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "नया कनेकà¥à¤¶à¤¨" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "छोड़े" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "मेनà¥à¤¯à¥‚" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "%s से संपरà¥à¤• मे" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ कनेकà¥à¤¶à¤‚स" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "सभी हटाà¤" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "लाइबà¥à¤°à¥‡à¤°à¥€ पà¥à¤¨à¤ƒ लोड करें" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "लाइबà¥à¤°à¥‡à¤°à¥€ निरà¥à¤¯à¤¾à¤¤ करे" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "कà¥à¤¯à¤¾ आप सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ रूप से आगे बढ़ना चाहते हैं?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "इस कनेकà¥à¤¶à¤¨ को हटाने से आप इस डेटा को पà¥à¤¨à¤°à¥à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ नहीं कर पाà¤à¤‚गे।" #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "हाà¤, हटाà¤à¤‚!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "समà¥à¤ªà¥‚रà¥à¤£ डेटा हटा दिठजाà¤à¤—ा और आप इसे पà¥à¤¨à¤°à¥à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ करने में सकà¥à¤·à¤® नहीं होंगे।" #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "हाà¤, सभी हटाà¤à¤!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "कनेकà¥à¤Ÿ करने के लिठउपयोगकरà¥à¤¤à¤¾ नाम (username ) आवशà¥à¤¯à¤• है!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "à¤à¤• फ़ाइल चà¥à¤¨à¥‡à¤‚" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_सहेजें" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_रदà¥à¤¦ करे" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "%s संपरà¥à¤• करने मे असमरà¥à¤¥" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "लाइबà¥à¤°à¥‡à¤°à¥€ निरà¥à¤¯à¤¾à¤¤ करने में असमरà¥à¤¥ " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Sequeler में आपका सà¥à¤µà¤¾à¤—त है" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "किसी भी सà¥à¤¥à¤¾à¤¨à¥€à¤¯(local) या दूरसà¥à¤¥(remote) डेटाबेस से कनेकà¥à¤Ÿ करे।" #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "à¤à¤• नया डेटाबेस जोड़ें" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "à¤à¤• डेटाबेस से कनेकà¥à¤Ÿ करें और इसे अपनी लाइबà¥à¤°à¥‡à¤°à¥€ में सहेजें" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "à¤à¤• नया Sequeler विंडो खोलें" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "संपरà¥à¤• आयात करे" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "पहले निरà¥à¤¯à¤¾à¤¤ किठगठSequeler संपरà¥à¤• आयात करें" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "किसी फाइल का चयन करें" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_खोले" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "लाइबà¥à¤°à¥‡à¤°à¥€ आयात करने मे असमरà¥à¤¥ " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "तालिका खोजें" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "तालिका खोजें…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "तालिका पà¥à¤¨à¤ƒ लोड करे" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "तालिका जोड़े" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- डेटाबेस का चयन करें -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "तालिकाà¤à¤‚" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "संरचना" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "सामगà¥à¤°à¥€" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "समà¥à¤¬à¤¨à¥à¤§" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "सवाल" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "ज़ूम आउट" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "ज़ूम 1: 1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "ज़ूम इन" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "उचà¥à¤š विषमता(contrast)" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "सोलराइज़à¥à¤¡ लाइट" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "सोलराइज़à¥à¤¡ डारà¥à¤•" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "टेकà¥à¤¸à¥à¤Ÿ सà¥à¤Ÿà¤¾à¤‡à¤² बदलें" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "à¤à¤• नया कà¥à¤µà¥‡à¤°à¥€ टैब बनाà¤à¤" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "कà¥à¤µà¥‡à¤°à¥€ %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "तालिका का चयन करें" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "इस दृशà¥à¤¯ को सकà¥à¤°à¤¿à¤¯ करने के लिठबाईं(left) साइडबार से à¤à¤• तालिका का चयन करें।" #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "कोई परिणाम उपलबà¥à¤§ नहीं" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "परिणाम पà¥à¤¨à¤ƒ लोड करें" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " खाने (फ़ीलà¥à¤¡à¥à¤¸ )" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "पिछला पृषà¥à¤ " #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "अगला पृषà¥à¤ " #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d पृषà¥à¤ " #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "पृषà¥à¤  पर जाà¤à¤‚ …" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 पृषà¥à¤ " #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d का %d पृषà¥à¤ " #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤¿à¤¯à¤¾à¤ (entries)" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " पà¥à¤°à¤¤à¤¿à¤¬à¤¨à¥à¤§" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "रनिंग कà¥à¤µà¥‡à¤°à¥€ …" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "परिणामो को निरà¥à¤¯à¤¾à¤¤ करे" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "CSV के रूप में निरà¥à¤¯à¤¾à¤¤ करें" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Text के रूप में निरà¥à¤¯à¤¾à¤¤ करें" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "कà¥à¤µà¥‡à¤°à¥€ पà¥à¤°à¥‹à¤¸à¥‡à¤¸ करने में असमरà¥à¤¥!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "कà¥à¤² %d परिणाम" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "कà¥à¤µà¥‡à¤°à¥€ सफलतापूरà¥à¤µà¤• निषà¥à¤ªà¤¾à¤¦à¤¿à¤¤! पà¥à¤°à¤­à¤¾à¤µà¤¿à¤¤ पंकà¥à¤¤à¤¿à¤¯à¤¾à¤ : %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "कà¥à¤µà¥‡à¤°à¥€ निषà¥à¤ªà¤¾à¤¦à¤¿à¤¤!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "रन कà¥à¤µà¥‡à¤°à¥€" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "जà¥à¥œà¥‡" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "कनेकà¥à¤¶à¤¨ संपादित करें" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "डà¥à¤ªà¥à¤²à¤¿à¤•ेट कनेकà¥à¤¶à¤¨" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "कनेकà¥à¤¶à¤¨ हटाà¤à¤" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "विकलà¥à¤ª" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "तà¥à¤°à¥à¤Ÿà¤¿(error)" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "सà¥à¤¤à¤‚भ पर" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "%s कॉपी करे" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (कॉपी)" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "Are you sure you want to proceed?" msgid "Are you sure you want to delete this Database?" msgstr "कà¥à¤¯à¤¾ आप सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ रूप से आगे बढ़ना चाहते हैं?" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "All the data will be deleted and you won’t be able to recover it." msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "समà¥à¤ªà¥‚रà¥à¤£ डेटा हटा दिठजाà¤à¤—ा और आप इसे पà¥à¤¨à¤°à¥à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ करने में सकà¥à¤·à¤® नहीं होंगे।" #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Libssh2 पà¥à¤°à¤¾à¤°à¤‚भ विफल (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "सॉकेट खोलने में विफल" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "कनेकà¥à¤Ÿ करने में विफल!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "SSH सेशन शà¥à¤°à¥‚ करते समय तà¥à¤°à¥à¤Ÿà¤¿(error): %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "पासवरà¥à¤¡ दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤®à¤¾à¤£à¥€à¤•रण विफल!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "सारà¥à¤µà¤œà¤¨à¤¿à¤• कà¥à¤‚जी(public key) दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤®à¤¾à¤£à¥€à¤•रण विफल!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "कोई समरà¥à¤¥à¤¿à¤¤ पà¥à¤°à¤®à¤¾à¤£à¥€à¤•रण के साधन नहीं मिले!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "लिसेन सॉकेट को खोलने में विफल" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "बाइनà¥à¤¡ करने में विफल। आपका डेटाबेस पोरà¥à¤Ÿ गलत हो सकता है!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "लिसेन असफल रहा!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "दूरसà¥à¤¥(remote) कनेकà¥à¤¶à¤¨ सà¥à¤µà¥€à¤•ार करने में विफल!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "direct-tcpip चैनल नहीं खोल सका! (धà¥à¤¯à¤¾à¤¨ दें कि यह सरà¥à¤µà¤° की समसà¥à¤¯à¤¾ हो सकती है! कृपया " "सरà¥à¤µà¤° लॉग की समीकà¥à¤·à¤¾ करें।)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "तà¥à¤°à¥à¤Ÿà¤¿(error)!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "SSH कà¥à¤‚जी(key) फ़ाइल उपलबà¥à¤§ नहीं है!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "SSH पबà¥à¤²à¤¿à¤• की(key) उपलबà¥à¤§ नहीं!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "कनेकà¥à¤¶à¤¨" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "कनेकà¥à¤¶à¤¨ का रंग चà¥à¤¨à¥‡à¤‚" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "कनेकà¥à¤¶à¤¨ नाम:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "कनेकà¥à¤¶à¤¨ का नाम" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "डेटाबेस पà¥à¤°à¤•ार:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "होसà¥à¤Ÿ:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "डेटाबेस का नाम:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "यूजरनाम:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "पासवरà¥à¤¡:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "पासवरà¥à¤¡ दिखाà¤" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "पासवरà¥à¤¡ छिपाà¤à¤‚" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "पोरà¥à¤Ÿ:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "फाइल पथ:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "अपनी SQLite फ़ाइल का चयन करें …" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "SSH टनल के माधà¥à¤¯à¤® से कनेकà¥à¤Ÿ करें:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "SSH होसà¥à¤Ÿ:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "SSH यूजरनाम:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "SSH पासवरà¥à¤¡:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "SSH पोरà¥à¤Ÿ:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "वैकलà¥à¤ªà¤¿à¤•" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "SSH आइडेंटिटी(identity)" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "अपनी पहचान(Identity) फ़ाइल चà¥à¤¨à¥‡à¤‚ …" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "SSH पबà¥à¤²à¤¿à¤• की(key) उपलबà¥à¤§ नहीं!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "अपनी SQLite फ़ाइल का चयन करें …" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "SSH कà¥à¤‚जी बनाà¤à¤‚" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "SSH टनल" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "बंद करे" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "कनेकà¥à¤¶à¤¨ सहेजें" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "टेसà¥à¤Ÿ कनेकà¥à¤¶à¤¨" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "ओपनिंग SSH टनल…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "टेसà¥à¤Ÿà¤¿à¤‚ग कनेकà¥à¤¶à¤¨â€¦" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "सफलतापूरà¥à¤µà¤• कनेकà¥à¤Ÿ हà¥à¤†!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "कनेकà¥à¤¶à¤¨ सहेजा जा रहा है …" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "कनेकà¥à¤¶à¤¨ सहेजा गया!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "कनेकà¥à¤Ÿ किया जा रहा…" #~ msgid "Light background" #~ msgstr "लाइट बैकगà¥à¤°à¤¾à¤‰à¤‚ड" #~ msgid "Dark background" #~ msgstr "डारà¥à¤• बैकगà¥à¤°à¤¾à¤‰à¤‚ड" ellie-commons-sequeler-9963fb4/po/id.po000066400000000000000000000374131512323162700200340ustar00rootroot00000000000000# Indonesian translations for io.github.ellie_commons.sequeler package. # Copyright (C) 2020 THE io.github.ellie_commons.sequeler'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # Mahyuddin , 2020. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2021-10-11 09:02+0000\n" "Last-Translator: Dicki Darmawan Saputra " "\n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.9-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Direktori tidak didukung" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Saya tidak tahu apa yang harus dilakukan" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Sesuatu yang tak terduga terjadi" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Keluar" #: src/Layouts/HeaderBar.vala:56 #, fuzzy #| msgid "Create a new Query Tab" msgid "Create a new database" msgstr "Buat tab Kueri baru" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- Pilih Basis Data -" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "Tipe Basis Data:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Jendela Baru" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Koneksi Baru" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Keluar" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Menu" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Menghubungkan %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "KONEKSI TERSIMPAN" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Hapus Semua" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Muat Ulang Pustaka" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Ekspor Pustaka" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Anda yakin ingin melanjutkan?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "Dengan menghapus koneksi ini, Anda tidak dapat memulihkan data ini." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Ya, Hapus!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "Semua data akan dihapus dan anda tidak bisa memulihkannya." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Ya, Hapus Semua!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "Nama pengguna diperlukan untuk terhubung!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Pilih file" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Simpan" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_Batal" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "Tidak dapat terhubung ke %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Tak Bisa Mengekspor Pustaka " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Selamat datang di Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "Hubungkan ke Basis Data Lokal atau Jauh." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Tambahkan Basis Data Baru" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "Hubungkan ke Basis Data dan simpan di Pustaka Anda" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Buka Jendela Sequeler Baru" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Impor Koneksi" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Impor Koneksi Sequeler yang Sebelumnya Diekspor" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Pilih berkas" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Buka" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Tak Bisa Mengimpor Pustaka " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Cari Table" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Cari Table…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Muat ulang Table" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Tambah Table" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Pilih Basis Data -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "TABLE" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Struktur" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "Konten" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "Relasi" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Kueri" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Perkecil" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "Perbesar 1:1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Perbesar" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Kontras Tinggi" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Cahaya Terpolarisasi" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Gelap Terpolarisasi" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Ubah Gaya Teks" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Buat tab Kueri baru" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Kueri %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Pilih Table" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "Pilih tabel dari sidebar kiri untuk mengaktifkan tampilan ini." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Tidak Ada hasil Yang Tersedia" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Muat Ulang Hasil" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " Bidang" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Halaman Sebelumnya" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Halaman Selanjutnya" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d Halaman" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Lompat ke halaman…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 Halaman" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d dari %d Halaman" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d Entri" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " Pembatas" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Menjalankan Query…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Hasil di Ekspor" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "Ekspor sebagai CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Ekspor sebagai Text" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Tidak dapat memproses Query!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d Hasil Total" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Query Berhasil Dieksekusi! Rows Affected: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Query Dieksekusi!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Jalankan Query" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "Menghubungkan" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Sunting Koneksi" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Salinan Koneksi" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Hapus Koneksi" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Pilihan" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Terjadi kesalahan" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "di Kolom" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Salin %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (salin)" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "Are you sure you want to proceed?" msgid "Are you sure you want to delete this Database?" msgstr "Anda yakin ingin melanjutkan?" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "All the data will be deleted and you won’t be able to recover it." msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "Semua data akan dihapus dan anda tidak bisa memulihkannya." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Inisialisasi Libssh2 gagal (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Gagal membuka socket" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "Gagal terhubung!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "Kesalahan saat memulai sesi SSH: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "Otentikasi dengan kata sandi gagal!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "Otentikasi dengan public key gagal!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Tidak ditemukan metode autentikasi yang didukung!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Gagal membuka listen socket" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "Gagal mengikat. Port Database Anda mungkin salah!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "Gagal mendengarkan!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Gagal menerima koneksi jarak jauh!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "Tidak dapat membuka saluran direct-tcpip! (Perhatikan bahwa ini bisa menjadi " "masalah di server! Harap tinjau log server.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Terjadi kesalahan!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "Berkas Kunci SSH hilang!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "Kunci publik SSH tidak ada!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "Koneksi" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Pilih warna koneksi" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Nama koneksi:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Nama koneksi" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Tipe Basis Data:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Utama:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Nama Basis Data:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Nama pengguna:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Kata sandi:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Tampilkan kata sandi" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Sembunyikan kata sandi" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Port:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Tempat Berkas:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Pilih File SQLite Anda…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "Terhubung melalui SSH Tunnel:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "Host SSH:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "Nama Pengguna SSH:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "Kata Sandi SSH:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "Port SSH:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Opsional" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "Identitas SSH" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Pilih File Identitas Anda…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "Kunci publik SSH tidak ada!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "Pilih File SQLite Anda…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Hasilkan SSH Key" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "Tunnel SSH" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Tutup" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Simpan Koneksi" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Uji Koneksi" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Membuka SSH Tunnel…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "Uji Koneksi…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "Berhasil Terhubung!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "Menyimpan Koneksi…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "Koneksi Tersimpan!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "Menghubungkan…" #~ msgid "Light background" #~ msgstr "Latar belakang terang" #~ msgid "Dark background" #~ msgstr "Latar belakang gelap" ellie-commons-sequeler-9963fb4/po/io.github.ellie_commons.sequeler.pot000066400000000000000000000305611512323162700261610ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "" #: src/Layouts/HeaderBar.vala:56 msgid "Create a new database" msgstr "" #: src/Layouts/HeaderBar.vala:65 msgid "Delete database" msgstr "" #: src/Layouts/HeaderBar.vala:74 msgid "Database properties" msgstr "" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "" #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "" #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "" #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "" #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "" #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "" #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr "" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr "" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "" #: src/Services/ActionManager.vala:254 msgid "Are you sure you want to delete this Database?" msgstr "" #: src/Services/ActionManager.vala:254 msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "" #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "" #: src/Widgets/ConnectionDialog.vala:332 msgid "SSH Public Key" msgstr "" #: src/Widgets/ConnectionDialog.vala:334 msgid "Select Your Public Key File…" msgstr "" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "" ellie-commons-sequeler-9963fb4/po/it.po000066400000000000000000000402261512323162700200500ustar00rootroot00000000000000# Italian translations for io.github.ellie_commons.sequeler package. # Copyright (C) 2020 THE io.github.ellie_commons.sequeler'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # Luca Andrea Rossi , 2020. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2020-04-12 17:29+0000\n" "Last-Translator: Alessandro \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.0-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Selezione di Cartelle non supportata" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Non so cosa fare" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Si é verificato un errore inaspettato" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Disconnetti" #: src/Layouts/HeaderBar.vala:56 #, fuzzy #| msgid "Create a new Query Tab" msgid "Create a new database" msgstr "Aggiungi una nuova tab" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- Selezionare un database -" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "Tipo database:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Nuova finestra" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Nuova connessione" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Chiudi" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Menu" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Connesso a %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "CONNESSIONI SALVATE" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Elimina tutto" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Ricarica libreria" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Esporta libreria" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Si è sicuri di voler procedere?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "" "Eliminando questa connessione non sarà possibile recuperare questi dati." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Sì, elimina!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "Tutti i dati saranno cancellati e non potranno essere recuperati." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Sì, elimina tutto!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "Nome utente necessario per eseguire una connessione!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Seleziona un file" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Salva" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_Annulla" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "Impossibile connettersi a %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Impossibile esportare la libreria " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Benvenuto in Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "Collegati a qualunque database locale o remoto." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Aggiungi nuovo database" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "Connettiti a un database e salvalo nella libreria" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Apri una nuova finestra di Sequeler" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Importa connessioni" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Importa un file di connessioni di Sequeler precedentemente esportato" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Seleziona un file" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Apri" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Impossibile importare la libreria " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Cerca tabelle" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Cerca tabelle…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Ricarica tabelle" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Aggiungi tabella" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Selezionare un database -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "TABELLE" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Struttura" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "Contenuto" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "Relazioni" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Esegui query" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Riduci zoom" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "Resetta zoom" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Aumenta zoom" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Alto Contrasto" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Chiaro Solarizzato" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Scuro Solarizzato" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Cambia stile testo" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Aggiungi una nuova tab" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Query %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Seleziona tabella" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "" "Selezionare una tabella dal pannello a sinistra per attivare questa " "visualizzazione." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Nessun risultato disponibile" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Ricarica risultati" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " campi" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Pagina precedente" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Pagina successiva" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d pagine" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Vai alla pagina…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 pagina" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d di %d pagine" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d voci" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " vincoli" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Query in esecuzione…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Esporta risultati" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "Esporta come CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Esporta come testo" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Impossibile eseguire la query!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d risultati totali" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Query eseguita correttamente! Righe alterate: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Query eseguita!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Esegui query" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "Connetti" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Modifica connessione" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Duplica connessione" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Cancella connessione" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Opzioni" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Errore" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "sulla colonna" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Copia %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (copia)" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "Are you sure you want to proceed?" msgid "Are you sure you want to delete this Database?" msgstr "Si è sicuri di voler procedere?" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "All the data will be deleted and you won’t be able to recover it." msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "Tutti i dati saranno cancellati e non potranno essere recuperati." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Impossibile inizializzare Libssh2 (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Impossibile aprire il Socket" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "Impossibile connettersi!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "Errore durante il lancio della sessione SSH: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "Autenticazione con password fallita!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "Autenticazione con chiave publica fallita!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Nessun metodo di autenticazione supportato!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Impossibile aprire il socket" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "" "Collegamento fallito. La tua porta del database potrebbe essere sbagliata!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "Impossibile collegarsi!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Connessione remote fallita!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "Impossibile aprire un canale tcpip diretto! (Questo potrebbe essere un " "problema relativo alle impostazioni del tuo server! Controlla il tuo server " "log.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Errore!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "Nessuna chiave SSH trovata!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "Nessuna chiave publica SSH trovata!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "Connessione" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Seleziona il colore della connessione" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Nome connessione:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Nome della connessione" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Tipo database:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Server:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Nome database:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Nome utente:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Password:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Mostra password" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Nascondi password" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Porta:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Indirizzo del file:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Selezionare il file SQLite…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "Connessione via tunnel SSH:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "Server SSH:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "Nome utente SSH:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "Password SSH:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "Porta SSH:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Opzionale" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "Identità SSH" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Seleziona il tuo file SSH…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "Nessuna chiave publica SSH trovata!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "Selezionare il file SQLite…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Come generare una chiave SSH" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "Connessione via tunnel SSH" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Chiudi" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Salva connessione" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Prova connessione" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Apertura tunnel SSH in corso…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "Verifica connessione in corso…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "Connesso correttamente!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "Salvataggio connessione…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "Connessione salvata!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "Connessione in corso…" #~ msgid "Light background" #~ msgstr "Sfondo chiaro" #~ msgid "Dark background" #~ msgstr "Sfondo scuro" ellie-commons-sequeler-9963fb4/po/ja.po000066400000000000000000000407531512323162700200330ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-12-25 11:37+0000\n" "Last-Translator: Ryo Nakano \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.15.1\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "ディレクトリã¯éžå¯¾å¿œã§ã™" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "éžå¯¾å¿œã§ã™" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "一切予期ã—ã¦ã„ãªã„事象ãŒç™ºç”Ÿã—ã¾ã—ãŸ" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "ログアウト" #: src/Layouts/HeaderBar.vala:56 msgid "Create a new database" msgstr "æ–°ã—ã„データベースを作æˆ" #: src/Layouts/HeaderBar.vala:65 msgid "Delete database" msgstr "データベースを削除" #: src/Layouts/HeaderBar.vala:74 msgid "Database properties" msgstr "データベースã®ãƒ—ロパティ" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "æ–°ã—ã„ウィンドウ" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "æ–°ã—ã„æŽ¥ç¶š" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "終了" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "メニュー" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "%s ã«æŽ¥ç¶šæ¸ˆã¿" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "ä¿å­˜æ¸ˆã¿ã®æŽ¥ç¶š" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "ã™ã¹ã¦å‰Šé™¤" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "ライブラリをå†èª­ã¿è¾¼ã¿" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "ライブラリをエクスãƒãƒ¼ãƒˆ" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "続行ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "ã“ã®æŽ¥ç¶šã‚’å‰Šé™¤ã™ã‚‹ã¨ã€ã“ã®ãƒ‡ãƒ¼ã‚¿ã¯å¾©å…ƒã§ãã¾ã›ã‚“。" #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "了解ã—ã¦å‰Šé™¤" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ãŒå‰Šé™¤ã•れã¾ã™ã€‚復元ã¯ã§ãã¾ã›ã‚“。" #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "了解ã—ã¦ã™ã¹ã¦å‰Šé™¤" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "接続ã™ã‚‹ã«ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŒå¿…è¦ã§ã™" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "ä¿å­˜(_S)" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "キャンセル(_C)" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "%s ã«æŽ¥ç¶šã§ãã¾ã›ã‚“" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "ライブラリをエクスãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Sequeler ã¸ã‚ˆã†ã“ã" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "ローカルã¾ãŸã¯ãƒªãƒ¢ãƒ¼ãƒˆã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«æŽ¥ç¶šã§ãã¾ã™ã€‚" #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "æ–°ã—ã„データベースを追加" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«æŽ¥ç¶šã—ã¦ã€ãƒ©ã‚¤ãƒ–ラリã«ä¿å­˜ã—ã¾ã™" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "æ–°ã—ã„ Sequeler ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ãã¾ã™" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "接続をインãƒãƒ¼ãƒˆ" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "以å‰ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—㟠Sequeler ã®æŽ¥ç¶šã‚’ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã™" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "é–‹ã(_O)" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "ライブラリをインãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "テーブルを検索" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "テーブルを検索…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "テーブルをå†èª­ã¿è¾¼ã¿" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "テーブルを追加" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’é¸æŠž -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "テーブル" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "構造" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "内容" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "リレーション" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "クエリ" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "縮å°" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "100% 表示" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "拡大" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "ãƒã‚¤ã‚³ãƒ³ãƒˆãƒ©ã‚¹ãƒˆ" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Solarized Light" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Solarized Dark" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "テキストスタイルを変更" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "æ–°ã—ã„クエリタブを作æˆ" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "クエリ %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "ãƒ†ãƒ¼ãƒ–ãƒ«ã‚’é¸æŠž" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "å·¦ã®ã‚µã‚¤ãƒ‰ãƒãƒ¼ã‹ã‚‰ãƒ†ãƒ¼ãƒ–ルをé¸ã‚“ã§ã€ã“ã®ãƒ“ューã«è¡¨ç¤ºã—ã¾ã™ã€‚" #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "çµæžœãªã—" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "çµæžœã‚’å†èª­ã¿è¾¼ã¿" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " フィールド" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "å‰ã®ãƒšãƒ¼ã‚¸" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "次ã®ãƒšãƒ¼ã‚¸" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d ページ" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "ページã«ç§»å‹•…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 ページ" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d / %d ページ中" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d エントリ" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " 制約" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "クエリを実行ã—ã¦ã„ã¾ã™â€¦" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "çµæžœã‚’エクスãƒãƒ¼ãƒˆ" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "CSV å½¢å¼ã§ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "テキスト形å¼ã§ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "クエリを処ç†ã§ãã¾ã›ã‚“" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d ä»¶ã®å…¨çµæžœ" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "クエリã®å®Ÿè¡Œã«æˆåŠŸã—ã¾ã—ãŸã€‚影響をå—ã‘る行: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "クエリを実行ã—ã¾ã—ãŸ" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "クエリを実行" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "接続" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "接続を編集" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "接続を複製" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "接続を削除" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "オプション" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "エラー" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "カラム" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "%s をコピー" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (コピー)" #: src/Services/ActionManager.vala:254 msgid "Are you sure you want to delete this Database?" msgstr "ã“ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’削除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹?" #: src/Services/ActionManager.vala:254 msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "ã™ã¹ã¦ã®ãƒ†ãƒ¼ãƒ–ルã¨ãƒ‡ãƒ¼ã‚¿ãŒå‰Šé™¤ã•れã¾ã™ã€‚復元ã¯ã§ãã¾ã›ã‚“。" #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Libssh2 ã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—㟠(%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "ソケット㮠open ã«å¤±æ•—ã—ã¾ã—ãŸ" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "connect ã«å¤±æ•—ã—ã¾ã—ãŸ" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "SSH セッションã®èµ·å‹•中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "パスワードèªè¨¼ã«å¤±æ•—ã—ã¾ã—ãŸ" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "公開éµèªè¨¼ã«å¤±æ•—ã—ã¾ã—ãŸ" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "対応ã™ã‚‹èªè¨¼æ–¹æ³•ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "listen 中ã®ã‚½ã‚±ãƒƒãƒˆã® open ã«å¤±æ•—ã—ã¾ã—ãŸ" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "" "bind ã«å¤±æ•—ã—ã¾ã—ãŸã€‚データベースã®ãƒãƒ¼ãƒˆç•ªå·ãŒé–“é•ã£ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "listen ã«å¤±æ•—ã—ã¾ã—ãŸ" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "リモート接続㮠accept ã«å¤±æ•—ã—ã¾ã—ãŸ" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "direct-tcpip ãƒãƒ£ãƒãƒ«ã‚’ open ã§ãã¾ã›ã‚“ã§ã—㟠(サーãƒãƒ¼å´ã®å•題ã®å¯èƒ½æ€§ãŒã‚り" "ã¾ã™ã€‚サーãƒãƒ¼ã®ãƒ­ã‚°ã‚’ã”確èªãã ã•ã„。)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "エラー" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "SSH éµãƒ•ァイルãŒã‚りã¾ã›ã‚“" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "SSH 公開éµãŒã‚りã¾ã›ã‚“" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "接続" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "接続ã®è‰²ã‚’é¸æŠž" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "接続å:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "接続ã®åå‰" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "データベースã®ç¨®é¡ž:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "ホスト:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "データベースå:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "ユーザーå:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "パスワード:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "パスワードを表示" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "パスワードをéžè¡¨ç¤º" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "ãƒãƒ¼ãƒˆç•ªå·:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "SSL を使ã†:" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "ファイルパス:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "SQLite ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠžâ€¦" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "SSH トンãƒãƒ«çµŒç”±ã§æŽ¥ç¶š:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "SSH ホスト:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "SSH ユーザーå:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "SSH パスワード:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "SSH ãƒãƒ¼ãƒˆç•ªå·:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "çœç•¥å¯" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "SSH èªè¨¼æƒ…å ±" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "èªè¨¼æƒ…å ±ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠžâ€¦" #: src/Widgets/ConnectionDialog.vala:332 msgid "SSH Public Key" msgstr "SSH 公開éµ" #: src/Widgets/ConnectionDialog.vala:334 msgid "Select Your Public Key File…" msgstr "SSH 公開éµãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠžâ€¦" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "SSH キーを生æˆ" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "SSH トンãƒãƒ«" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "é–‰ã˜ã‚‹" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "接続をä¿å­˜" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "接続を確èª" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "SSH トンãƒãƒ«ã‚’é–‹ã„ã¦ã„ã¾ã™â€¦" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "接続を確èªã—ã¦ã„ã¾ã™â€¦" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "æŽ¥ç¶šã«æˆåŠŸã—ã¾ã—ãŸ" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "接続をä¿å­˜ã—ã¦ã„ã¾ã™â€¦" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "接続をä¿å­˜ã—ã¾ã—ãŸ" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "接続試行中…" #~ msgid "Light background" #~ msgstr "明るã„背景" #~ msgid "Dark background" #~ msgstr "æš—ã„背景" ellie-commons-sequeler-9963fb4/po/lg.po000066400000000000000000000342341512323162700200400ustar00rootroot00000000000000# Ganda translations for io.github.ellie_commons.sequeler package. # Copyright (C) 2020 THE io.github.ellie_commons.sequeler'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # Laurence Bahiirwa , 2020. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2023-05-13 20:50+0000\n" "Last-Translator: Clizco \n" "Language-Team: Luganda \n" "Language: lg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.18-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Dayirekita teziwagirwa" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "tebamanyi kya kukola" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Waliwo ekintu kye yali tasuubira ddala ekyaliwo" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Fuluma" #: src/Layouts/HeaderBar.vala:56 #, fuzzy msgid "Create a new database" msgstr "Kola Datanesi empya" #: src/Layouts/HeaderBar.vala:65 #, fuzzy msgid "Delete database" msgstr "Kola Datanesi empya" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "Ekika ky'enkolagana:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Eddirisa Eppya" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Enkolagana empya" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Okuwanika" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "menu" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Eyungiddwa ku %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Byonna bigyemu" #: src/Layouts/Library.vala:81 #, fuzzy msgid "Reload Library" msgstr "Nonya mu terekero lyo" #: src/Layouts/Library.vala:84 #, fuzzy msgid "Export Library" msgstr "Nonya mu terekero lyo" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "" #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "" #: src/Layouts/Library.vala:236 #, fuzzy msgid "Yes, Delete All!" msgstr "Byonna bigyemu" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_sazamu" #: src/Layouts/Library.vala:472 #, fuzzy, c-format msgid "Unable to Connect to %s" msgstr "Gyamu Enkolagana" #: src/Layouts/Library.vala:485 #, fuzzy msgid "Unable to Export Library " msgstr "Okunyerezebwa tekusobolwa!" #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Tukwaniriza ku Sequeler" #: src/Layouts/Welcome.vala:29 #, fuzzy msgid "Connect to Any Local or Remote Database." msgstr "Kola enkolagana ne Databesi ku sava yonna" #: src/Layouts/Welcome.vala:38 #, fuzzy msgid "Add a New Database" msgstr "Kola Datanesi empya" #: src/Layouts/Welcome.vala:38 #, fuzzy msgid "Connect to a Database and Save It in Your Library" msgstr "Wegatte ku Database ogiterekke mu terekero lyo." #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "" #: src/Layouts/Welcome.vala:40 #, fuzzy msgid "Import Connections" msgstr "Gezesa Enkolagana" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "" #: src/Layouts/Welcome.vala:107 #, fuzzy msgid "Unable to Import Library " msgstr "Okunyerezebwa tekusobolwa!" #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "" #: src/Layouts/DataBaseSchema.vala:176 #, fuzzy msgid "- Select Database -" msgstr "Kola Datanesi empya" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 #, fuzzy msgid "Query" msgstr "Buza Databesi" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "" #: src/Layouts/DataBaseView.vala:241 #, fuzzy, c-format msgid "Query %i" msgstr "Buza Databesi" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "" #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Teri bivuddeyo" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr "" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr "" #: src/Layouts/Views/Query.vala:280 #, fuzzy msgid "Running Query…" msgstr "Databesi erikebelwa..." #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Okunyerezebwa tekusobolwa!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "" #: src/Layouts/Views/Query.vala:519 #, fuzzy, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Okunyerezebwa kukoze bulungi!" #: src/Layouts/Views/Query.vala:522 #, fuzzy msgid "Query Executed!" msgstr "Okunyerezebwa kukoze bulungi!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Buza Databesi" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "Gatta Enkolagana" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Terezza Enkolagana" #: src/Partials/LibraryItem.vala:113 #, fuzzy msgid "Duplicate Connection" msgstr "Gyamu Enkolagana" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Gyamu Enkolagana" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "" #: src/Services/ActionManager.vala:254 msgid "Are you sure you want to delete this Database?" msgstr "" #: src/Services/ActionManager.vala:254 msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "" #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "" #: src/Services/ConnectionManager.vala:214 #, fuzzy msgid "Failed to connect!" msgstr "Gyamu Enkolagana" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 #, fuzzy msgid "Connection" msgstr "Enkolagana empya" #: src/Widgets/ConnectionDialog.vala:148 #, fuzzy msgid "Select connection color" msgstr "Gyamu Enkolagana" #: src/Widgets/ConnectionDialog.vala:171 #, fuzzy msgid "Connection Name:" msgstr "Erinnya ly'enkolagana" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Erinnya ly'enkolagana" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Ekika ky'enkolagana:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Erinnya lya Sava:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Erinnya lya Databesi:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Erinnya lya agyikozesa:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Ekyama:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 #, fuzzy msgid "Show password" msgstr "Ekyama:" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 #, fuzzy msgid "Hide password" msgstr "Ekyama:" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "" #: src/Widgets/ConnectionDialog.vala:277 #, fuzzy msgid "Connect via SSH Tunnel:" msgstr "Enkolagana mu termino" #: src/Widgets/ConnectionDialog.vala:287 #, fuzzy msgid "SSH Host:" msgstr "Erinnya lya Sava:" #: src/Widgets/ConnectionDialog.vala:292 #, fuzzy msgid "SSH Username:" msgstr "Erinnya lya agyikozesa:" #: src/Widgets/ConnectionDialog.vala:297 #, fuzzy msgid "SSH Password:" msgstr "Ekyama:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "" #: src/Widgets/ConnectionDialog.vala:332 msgid "SSH Public Key" msgstr "" #: src/Widgets/ConnectionDialog.vala:334 msgid "Select Your Public Key File…" msgstr "" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "" #: src/Widgets/ConnectionDialog.vala:382 #, fuzzy msgid "SSH Tunnel" msgstr "Enkolagana mu termino" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Galawo" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Tereka Enkolagana" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Gezesa Enkolagana" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "" #: src/Widgets/ConnectionDialog.vala:708 #, fuzzy msgid "Testing Connection…" msgstr "Gezesa Enkolagana" #: src/Widgets/ConnectionDialog.vala:730 #, fuzzy msgid "Successfully Connected!" msgstr "Okunyerezebwa kukoze bulungi!" #: src/Widgets/ConnectionDialog.vala:739 #, fuzzy msgid "Saving Connection…" msgstr "Tereka Enkolagana" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "Enkolagana eterekeddwa!" #: src/Widgets/ConnectionDialog.vala:752 #, fuzzy msgid "Connecting…" msgstr "Gatta Enkolagana" #~ msgid "Light background" #~ msgstr "Ennyuma enjeru" #~ msgid "Dark background" #~ msgstr "omuddugavu mugongo" ellie-commons-sequeler-9963fb4/po/lt.po000066400000000000000000000406151512323162700200550ustar00rootroot00000000000000# Lithuanian translations for io.github.ellie_commons.sequeler package. # Copyright (C) 2020 THE io.github.ellie_commons.sequeler'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # Moo, 2020. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2021-06-28 12:33+0000\n" "Last-Translator: GM \n" "Language-Team: Lithuanian \n" "Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > " "19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? " "1 : 2);\n" "X-Generator: Weblate 4.7.1-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Katalogai yra nepalaikomi" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Nežinau kÄ… daryti" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Nutiko kažkas visiÅ¡kai netikÄ—to" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Atsijungti" #: src/Layouts/HeaderBar.vala:56 #, fuzzy #| msgid "Create a new Query Tab" msgid "Create a new database" msgstr "Sukurti naujÄ… užklausos langÄ…" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- Pasirinkite duomenų bazÄ™ -" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "Duomenų bazÄ—s tipas:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Naujas langas" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Naujas ryÅ¡ys" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "IÅ¡eiti" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Meniu" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Prisijungta prie %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "Ä®RAÅ YTI RYÅ IAI" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "IÅ¡trinti visus" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "IÅ¡ naujo įkelti bibliotekÄ…" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Eksportuoti bibliotekÄ…" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Ar tikrai norite tÄ™sti?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "IÅ¡trynÄ™ šį ryšį, nebegalÄ—site atkurti Å¡ių duomenų." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Taip, iÅ¡trinti!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "Visi duomenys bus iÅ¡trinti ir jÅ«s nebegalÄ—site jų atkurti." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Taip, iÅ¡trinti viskÄ…!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "Norint prisijungti bÅ«tina įvesti slapyvardį!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Pasirinkti failÄ…" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "Ä®_raÅ¡yti" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_Atsisakyti" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "Nepavyko prisijungti prie %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Nepavyko eksportuoti bibliotekos " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Sveiki atvykÄ™ į Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "Prisijunkite prie bet kurios vietinÄ—s ar nuotolinÄ—s duomenų bazÄ—s." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "PridÄ—ti naujÄ… duomenų bazÄ™" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "Prisijunkite prie duomenų bazÄ—s ir įraÅ¡ykite jÄ… savo bibliotekoje" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Atverkite naujÄ… Sequeler langÄ…" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Importuoti ryÅ¡ius" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Importuokite anksÄiau eksportuotus Sequeler ryÅ¡ius" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Pasirinkti failÄ…" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Atverti" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Nepavyko importuoti bibliotekos " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "IeÅ¡koti lentelÄ—se" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "IeÅ¡koti lentelÄ—se…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "IÅ¡ naujo įkelti lenteles" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "PridÄ—ti lentelÄ™" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Pasirinkite duomenų bazÄ™ -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "LENTELÄ–S" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "StruktÅ«ra" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "Turinys" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "SÄ…sajos" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Užklausti" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Atitolinti" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "Mastelis 1:1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Priartinti" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "AukÅ¡tas kontrastas" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Solarized Å¡viesa" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Solarized tamsa" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Pakeisti teksto stilių" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Sukurti naujÄ… užklausos langÄ…" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Užklausti %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Pasirinkti lentelÄ™" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "" "NorÄ—dami aktyvuoti šį rodinį, pasirinkite lentelÄ™ kairiojoje Å¡oninÄ—je " "juostoje." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "NÄ—ra prieinamų rezultatų" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "IÅ¡ naujo įkelti rezultatus" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " laukai" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Ankstesnis puslapis" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Kitas puslapis" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d puslapių" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Pereitį į puslapį…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 puslapis" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d iÅ¡ %d puslapių" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d įrašų" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " ribojimų" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Vykdoma užklausa…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Eksportuoti rezultatus" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "Eksportuoti kaip CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Eksportuoti kaip tekstÄ…" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Nepavyksta įvykdyti užklausos!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "IÅ¡ viso %d rezultatų" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Užklausa sÄ—kmingai įvykdyta! Paveiktos eilutÄ—s: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Užklausa įvykdyta!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Vykdyti užklausÄ…" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "Prisijungti" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Taisyti ryšį" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Pasikartojantis ryÅ¡ys" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "IÅ¡trinti ryšį" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Parametrai" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Klaida" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "ties stulpeliu" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Kopijuoti %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (nukopijuoti)" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "Are you sure you want to proceed?" msgid "Are you sure you want to delete this Database?" msgstr "Ar tikrai norite tÄ™sti?" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "All the data will be deleted and you won’t be able to recover it." msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "Visi duomenys bus iÅ¡trinti ir jÅ«s nebegalÄ—site jų atkurti." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Libssh2 inicijavimas patyrÄ— nesÄ—kmÄ™ (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Nepavyko atidaryti lizdo" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "Nepavyko prisijungti!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "Klaida, paleidžiant SSH seansÄ…: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "TapatybÄ—s nustatymas slaptažodžiu patyrÄ— nesÄ—kmÄ™!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "TapatybÄ—s nustatymas vieÅ¡uoju raktu patyrÄ— nesÄ—kmÄ™!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Rasti nepalaikomi tapatybÄ—s nustatymo metodai!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Nepavyko atidaryti klausymosi lizdo" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "" "Nepavyko susieti. Gali bÅ«ti, kad jÅ«sų duomenų bazÄ—s prievadas yra " "neteisingas!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "Nepavyko klausytis!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Nepavyko priimti nuotolinio ryÅ¡io!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "Nepavyko atidaryti direct-tcpip kanalo! (TurÄ—kite omenyje, kad Å¡i problema " "gali bÅ«ti serveryje! PeržiÅ«rÄ—kite serverio žurnalus.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Klaida!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "TrÅ«ksta SSH rakto failo!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "TrÅ«ksta SSH rakto failo!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "RyÅ¡ys" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "PasirinkitÄ™ prisijungimo spalvÄ…" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "RyÅ¡io pavadinimas:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "RyÅ¡io pavadinimas" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Duomenų bazÄ—s tipas:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Serveris:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Duomenų bazÄ—s pavadinimas:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Naudotojo vardas:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Slaptažodis:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Rodyti slaptažodį" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "PaslÄ—pti slaptažodį" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Prievadas:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Failo kelias:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Pasirinkite savo SQLite failą…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "Prisijungti per SSH tunelį:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "SSH serveris:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "SSH naudotojo vardas:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "SSH slaptažodis:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "SSH prievadas:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "NebÅ«tina" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "SSH tapatybÄ—" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Pasirinkite savo tapatybÄ—s failą…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "TrÅ«ksta SSH rakto failo!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "Pasirinkite savo SQLite failą…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Generuoti SSH raktÄ…" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "SSH tunelis" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Užverti" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Ä®raÅ¡yti ryšį" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "IÅ¡bandyti ryšį" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Atidaromas SSH tunelis…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "IÅ¡bandomas ryÅ¡ys…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "SÄ—kmingai prisijungta!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "Ä®raÅ¡omas ryÅ¡ys…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "RyÅ¡ys įraÅ¡ytas!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "Jungiamasi…" #~ msgid "Light background" #~ msgstr "Å viesus fonas" #~ msgid "Dark background" #~ msgstr "Tamsus fonas" ellie-commons-sequeler-9963fb4/po/meson.build000066400000000000000000000002321512323162700212270ustar00rootroot00000000000000i18n.gettext(meson.project_name(), args: [ '--directory=' + meson.project_source_root(), '--from-code=UTF-8' ] ) subdir('extra') ellie-commons-sequeler-9963fb4/po/pl.po000066400000000000000000000376361512323162700200620ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-06-06 16:01+0000\n" "Last-Translator: Eryk Michalak \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 5.12-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Katalogi nie sÄ… wspierane" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Nie wiem co zrobić" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "WydarzyÅ‚o siÄ™ coÅ› kompletnie niespodziewanego" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Wyloguj" #: src/Layouts/HeaderBar.vala:56 msgid "Create a new database" msgstr "Utwórz nowÄ… bazÄ™ danych" #: src/Layouts/HeaderBar.vala:65 msgid "Delete database" msgstr "UsuÅ„ bazÄ™ danych" #: src/Layouts/HeaderBar.vala:74 msgid "Database properties" msgstr "WÅ‚aÅ›ciwoÅ›ci bazy danych" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Nowe okno" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Nowe połączenie" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "WyjÅ›cie" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Menu" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Połączono z %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "ZAPISANE POÅÄ„CZENIA" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "UsuÅ„ wszystko" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "PrzeÅ‚aduj bibliotekÄ™" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Eksportuj bibliotekÄ™" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Czy na pewno chcesz kontynuować?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "Po usuniÄ™ciu tego połączenia nie bÄ™dzie można go odzyskać." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Tak, usuÅ„!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "Wszystkie dane zostanÄ… usuniÄ™te i nie bÄ™dzie można ich przywrócić." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Tak, usuÅ„ wszystko!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "Nazwa użytkownika jest wymagana do połączenia!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Wybierz plik" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Zapisz" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_Anuluj" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "Nie można połączyć z %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Nie udaÅ‚o siÄ™ wyeksportować biblioteki " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Witaj w programie Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "Połącz siÄ™ z dowolnÄ… lokalnÄ… lub zdalnÄ… bazÄ… danych." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Dodaj nowÄ… bazÄ™ danych" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "Połącz z bazÄ… danych i zapisz jÄ… w swojej bibliotece" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Otwórz nowe okno Sequelera" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Importuj połączenia" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Zaimportuj wczeÅ›niej wyeksportowane połączenia programu Sequeler" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Wybierz plik" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Otwórz" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Nie można zaimportować biblioteki " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Szukaj w tabelach" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Szukaj w tabelach…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "PrzeÅ‚aduj tabele" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Dodaj tabelÄ™" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Wybierz dazÄ™ danych -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "TABELE" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Struktura" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "Dane" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "Relacje" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Zapytania" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Oddal" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "Zbliżenie 1:1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Przybliż" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Wysoki kontrast" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "RozÅ›wietlony jasny" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "RozÅ›wietlony ciemny" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "ZmieÅ„ styl tekstu" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Stwórz nowÄ… kartÄ™ zapytania" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Zapytanie %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Wybierz tabelÄ™" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "Wybierz tabelÄ™ z menu po lewej by aktywować ten widok." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Brak wyników" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "PrzeÅ‚aduj wyniki" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " Pola" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Poprzednia strona" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "NastÄ™pna strona" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "Stron: %d" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Przejdź do strony…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 strona" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d z %d stron" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d wpisów" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " Ograniczenia" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Uruchamianie zapytania…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Eksportuj wyniki" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "Eksportuj do CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Eksportuj jako tekst" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Nie udaÅ‚o siÄ™ przetworzyć zapytania!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "CaÅ‚kowita liczba wyników: %d" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Zapytanie wykonane! Zmienionych rekordów: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Zapytanie wykonane!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Wykonaj zapytanie" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "Połącz" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Edytuj połączenie" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Klonuj połączenie" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "UsuÅ„ połączenie" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Opcje" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Błąd" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "w kolumnie" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Kopiuj %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (kopia)" #: src/Services/ActionManager.vala:254 msgid "Are you sure you want to delete this Database?" msgstr "Czy na pewno chcesz usunąć tÄ™ bazÄ™ danych?" #: src/Services/ActionManager.vala:254 msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "" "Wszystkie tabele oraz dane zostanÄ… usuniÄ™te i nie bÄ™dzie można ich " "przywrócić." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Nie udaÅ‚o siÄ™ zainicjować Libssh2 (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Nie udaÅ‚o siÄ™ otworzyć gniazda dla połączenia" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "Nie udaÅ‚o siÄ™ połączyć!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "Błąd przy uruchamianiu sesji SSH: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "Uwierzytelnianie hasÅ‚em siÄ™ nie powiodÅ‚o!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "Uwierzytelnianie kluczem publicznym siÄ™ nie powiodÅ‚o!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Nie znaleziono żadnych wspieranych metod uwierzytelniania!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Nie udaÅ‚o siÄ™ utworzyć gniazda dla nasÅ‚uchiwania" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "" "Nie udaÅ‚o siÄ™ przypisać gniazda. Twój port bazy danych może być niepoprawny!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "Nie udaÅ‚o siÄ™ rozpocząć nasÅ‚uchiwania!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Nie udaÅ‚o siÄ™ przyjąć zdalnego połączenia!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "Nie udaÅ‚o siÄ™ otworzyć kanaÅ‚u direct-tcpip! (To może być problem serwera! " "Przejrzyj jego logi.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Błąd!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "Brak pliku klucza SSH!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "Brak pliku klucza publicznego SSH!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "Połączenie" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Wybierz kolor połączenia" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Nazwa połączenia:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Nazwa połączenia" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Typ bazy danych:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Adres:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Nazwa bazy danych:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Użytkownik:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "HasÅ‚o:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Pokaż hasÅ‚o" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Ukryj hasÅ‚o" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Port:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "Użyj SSL:" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Åšcieżka do pliku:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Wybierz plik SQLite…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "Połącz przez tunel SSH:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "Adres SSH:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "Użytkownik SSH:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "HasÅ‚o SSH:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "Port SSH:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Opcjonalne" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "Tożsamość SSH" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Wybierz plik tożsamoÅ›ci…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "Brak pliku klucza publicznego SSH!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "Wybierz plik SQLite…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Wygeneruj klucz SSH" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "Tunel SSH" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Zamknij" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Zapisz" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Test połączenia" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Otwieranie tunelu SSH…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "Testowanie połączenia…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "UdaÅ‚o siÄ™ połączyć!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "Zapisywanie połączenia…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "Połączenie zapisane!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "ÅÄ…czenie…" #~ msgid "Light background" #~ msgstr "Jasne tÅ‚o" #~ msgid "Dark background" #~ msgstr "Ciemne tÅ‚o" ellie-commons-sequeler-9963fb4/po/pt.po000066400000000000000000000400601512323162700200530ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2020-08-30 19:37+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.2.1-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Diretórios não são suportados" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Não sei o que fazer" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Algo inesperado aconteceu" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Sair" #: src/Layouts/HeaderBar.vala:56 #, fuzzy #| msgid "Create a new Query Tab" msgid "Create a new database" msgstr "Criar uma nova Guia de Consultas" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- Selecione o Banco de Dados -" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "Tipo de Banco de Dados:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Nova Janela" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Nova Conexão" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Sair" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Menu" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Conectado a %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "CONEXÕES SALVAS" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Apagar Tudo" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Recarregar Biblioteca" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Exportar Biblioteca" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Tem certeza que deseja prosseguir?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "Ao apagar esta conexão, não será capaz de recuperar estes dados." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Sim, Apague!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "Todos os dados serão apagados e não será capaz de recuperá-los." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Sim, Apague Tudo!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "É obrigatório um nome de utilizador para conectar!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Escolha um ficheiro" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Gravar" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_Cancelar" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "Não é possível conectar-se a %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Não é Possível Exportar a Biblioteca " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Bem-vindo ao Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "Conecte-se a qualquer banco de dados local ou remoto." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Adicionar um Novo Banco de Dados" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "Conecte-se a um Banco de Dados e Grave ele em sua Biblioteca" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Abrir uma nova janela do Sequeler" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Importar Conexões" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Importar Conexões do Sequeler Exportadas Anteriormente" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Selecione um ficheiro" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Abrir" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Não é Possível Importar a Biblioteca " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Buscar Tabelas" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Buscar Tabelas…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Recarregar as Tabelas" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Adicionar Tabela" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Selecione o Banco de Dados -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "TABELAS" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Estrutura" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "Conteúdo" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "Relacionamentos" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Consultar" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Diminuir zoom" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "Zoom 1:1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Aumentar Zoom" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Alto Contraste" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Claro Solarizado" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Escuro Solarizado" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Mudar Estilo do Texto" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Criar uma nova Guia de Consultas" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Consultar %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Selecionar Tabela" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "" "Selecione uma tabela da barra lateral esquerda para ativar esta exibição." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Não Há Resultados Disponíveis" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Recarregar Resultados" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " Campos" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Página Anterior" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Próxima Página" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d páginas" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Ir para página…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 Página" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d de %d Páginas" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d Entradas" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " Restrições" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Executando Consulta…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Exportar Resultados" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "Exportar como CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Exportar como Texto" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Não é possível processar a consulta!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "Total de %d Resultados" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Consulta executada com sucesso! Linhas afetadas: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Consulta Executada!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Executar Consulta" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "Conectar" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Editar Conexão" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Duplicar Conexão" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Remover Conexão" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Opções" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Erro" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "na Coluna" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Copiar %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (cópia)" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "Are you sure you want to proceed?" msgid "Are you sure you want to delete this Database?" msgstr "Tem certeza que deseja prosseguir?" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "All the data will be deleted and you won’t be able to recover it." msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "Todos os dados serão apagados e não será capaz de recuperá-los." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Falha ao iniciar libssh2 (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Falha ao abrir socket" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "Falhou ao conectar!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "Erro ao iniciar sessão SSH: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "Falha na autenticação por palavra-passe!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "Autenticação via chave pública falhou!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Não foi encontrado nenhum método de autenticação suportado!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Falha ao abrir o socket" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "Falha ao conectar. A porta do banco de dados pode estar errada!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "Falha ao iniciar!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Falha ao aceitar a conexão remota!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "Não foi possível abrir o canal direct-tcpip! (Note que isso pode ser um " "problema no servidor! Por favor, verifique os logs do servidor.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Erro!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "Ficheiro de chave SSH não encontrada!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "Chave pública SSH não encontrada!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "Conexão" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Escolha a cor da conexão" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Nome da Conexão:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Nome da Conexão" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Tipo de Banco de Dados:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Host:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Nome do Banco de Dados:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Utilizador:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Palavra-passe:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Exibir palavra-passe" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Ocultar palavra-passe" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Porta:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Caminho do Ficheiro:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Selecione seu Ficheiro SQLite…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "Conectar via terminal SSH:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "Host SSH:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "Utilizador SSH:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "Palavra-passe SSH:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "Porta SSH:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Opcional" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "Identidade SSH" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Selecione o seu ficheiro de identificação…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "Chave pública SSH não encontrada!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "Selecione seu Ficheiro SQLite…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Gerar chave SSH" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "Túnel SSH" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Fechar" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Gravar Conexão" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Testar Conexão" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "A abrir túnel SSH…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "Testando Conexão…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "Conectado com Sucesso!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "A gravar Conexão…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "Conexão Salva!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "Conectando…" #~ msgid "Light background" #~ msgstr "Fundo claro" #~ msgid "Dark background" #~ msgstr "Fundo escuro" ellie-commons-sequeler-9963fb4/po/pt_BR.po000066400000000000000000000402521512323162700204410ustar00rootroot00000000000000# Portuguese translations for io.github.ellie_commons.sequeler package. # Copyright (C) 2020 THE io.github.ellie_commons.sequeler'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # Everson Santos Araujo , 2020. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-01-10 13:00+0000\n" "Last-Translator: aquila0101 \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.10-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Diretórios não são suportados" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Não sei o que fazer" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Algo completamente inesperado ocorreu" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Desconectar" #: src/Layouts/HeaderBar.vala:56 #, fuzzy #| msgid "Create a new Query Tab" msgid "Create a new database" msgstr "Criar uma nova Aba de Consultas" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- Selecione o Banco de Dados -" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "Tipo de Banco de Dados:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Nova Janela" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Nova Conexão" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Sair" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Menu" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Conectado a %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "CONEXÕES SALVAS" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Apagar Tudo" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Recarregar Biblioteca" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Exportar Biblioteca" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Tem certeza que deseja prosseguir?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "Ao excluir esta conexão, você não será capaz de recuperar estes dados." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Sim, Apague!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "Todos os dados serão apagados e você não será capaz de recuperá-los." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Sim, Apague Tudo!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "Um nome de usuário é necessário para conectar!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Escolha um arquivo" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Salvar" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_Cancelar" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "Não é possível conectar-se a %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Não é Possível Exportar a Biblioteca " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Bem-vindo ao Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "Conecte-se a qualquer banco de dados local ou remoto." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Adicionar um Novo Banco de Dados" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "Conecte-se a um Banco de Dados e Salve ele em sua Biblioteca" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Abrir uma nova janela do Sequeler" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Importar Conexões" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Importar Conexões do Sequeler Exportadas Anteriormente" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Selecione um arquivo" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Abrir" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Não é Possível Importar a Biblioteca " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Buscar Tabelas" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Buscar Tabelas…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Recarregar as Tabelas" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Adicionar Tabela" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Selecione o Banco de Dados -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "TABELAS" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Estrutura" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "Conteúdo" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "Relacionamentos" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Consultar" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Diminuir zoom" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "Zoom 1:1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Aumentar Zoom" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Alto Contraste" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Claro Solarizado" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Escuro Solarizado" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Mudar Estilo do Texto" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Criar uma nova Aba de Consultas" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Consulta %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Selecionar Tabela" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "" "Selecione uma tabela da barra lateral esquerda para ativar esta exibição." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Não Há Resultados Disponíveis" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Recarregar Resultados" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " Campos" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Página Anterior" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Próxima Página" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d Páginas" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Ir para página…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 Página" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d de %d Páginas" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d Entradas" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " Restrições" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Executando Consulta…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Exportar Resultados" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "Exportar como CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Exportar como Texto" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Não é possível processar a consulta!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "Total de %d Resultados" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Consulta executada com sucesso! Linhas afetadas: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Consulta Executada!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Executar Consulta" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "Conectar" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Editar Conexão" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Duplicar Conexão" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Remover Conexão" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Opções" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Erro" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "na Coluna" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Copiar %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (cópia)" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "Are you sure you want to proceed?" msgid "Are you sure you want to delete this Database?" msgstr "Tem certeza que deseja prosseguir?" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "All the data will be deleted and you won’t be able to recover it." msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "Todos os dados serão apagados e você não será capaz de recuperá-los." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Falha ao iniciar libssh2 (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Falha ao abrir socket" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "Falha ao conectar!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "Erro ao iniciar sessão SSH: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "Falha na autenticação por senha!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "Autenticação via chave pública falhou!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Não foi encontrado nenhum método de autenticação suportado!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Falha ao abrir o socket" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "Falha ao conectar. A porta do banco de dados pode estar errada!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "Falha ao iniciar!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Falha ao aceitar a conexão remota!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "Não foi possível abrir o canal direct-tcpip! (Note que isso pode ser um " "problema no servidor! Por favor, verifique os logs do servidor.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Erro!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "Arquivo de chave SSH não encontrada!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "Chave pública SSH não encontrada!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "Conexão" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Escolha a cor da conexão" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Nome da Conexão:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Nome da Conexão" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Tipo de Banco de Dados:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Host:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Nome do Banco de Dados:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Usuário:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Senha:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Exibir senha" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Ocultar senha" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Porta:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Caminho do Arquivo:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Selecione seu Arquivo SQLite…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "Conectar-se através de um Túnel SSH" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "Servidor SSH:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "Usuário SSH:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "Senha SSH:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "Porta SSH:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Opcional" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "Identidade SSH" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Selecione o seu arquivo de identificação…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "Chave pública SSH não encontrada!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "Selecione seu Arquivo SQLite…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Gerar chave SSH" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "Túnel SSH" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Fechar" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Salvar Conexão" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Testar Conexão" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Abrindo túnel SSH…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "Testando Conexão…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "Conectado com Sucesso!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "Salvando Conexão…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "Conexão Salva!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "Conectando…" #~ msgid "Light background" #~ msgstr "Fundo claro" #~ msgid "Dark background" #~ msgstr "Fundo escuro" ellie-commons-sequeler-9963fb4/po/ru.po000066400000000000000000000443541512323162700200700ustar00rootroot00000000000000# Russian translations for io.github.ellie_commons.sequeler package. # Copyright (C) 2020 THE io.github.ellie_commons.sequeler'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-08-02 02:02+0000\n" "Last-Translator: lenemter \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 5.13-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Каталоги не поддерживаютÑÑ" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Ðе знаю что делать" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Произошло что-то Ñовершенно неожиданное" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "ОтключитьÑÑ" #: src/Layouts/HeaderBar.vala:56 msgid "Create a new database" msgstr "Создать новую базу данных" #: src/Layouts/HeaderBar.vala:65 msgid "Delete database" msgstr "Удалить базу данных" #: src/Layouts/HeaderBar.vala:74 msgid "Database properties" msgstr "СвойÑтва БД" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Ðовое окно" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Ðовое подключение" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Выход" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Меню" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "ПодключитьÑÑ Ðº %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "Сохранённые подключениÑ" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Удалить вÑÑ‘" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Перезагрузить библиотеку" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "ЭкÑпортировать библиотеку" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Ð’Ñ‹ дейÑтвительно хотите Ñделать Ñто?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "Удалив Ñто Ñоединение, вы не Ñможете воÑÑтановить Ñти данные." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Да, удалить!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "Ð’Ñе Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ безвозвратно удалены." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Да, удалить вÑÑ‘!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "Ð”Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Выберите файл" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Сохранить" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_Отмена" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "Ðе удалоÑÑŒ подключитьÑÑ Ðº %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Ðе удалоÑÑŒ ÑкÑпортировать библиотеку " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Добро пожаловать в Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "ПодключитьÑÑ Ðº локальной или удалённой базе данных." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Добавить новую базу данных" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "ПодключитьÑÑ Ðº базе данных и Ñохранить её в вашей библиотеке" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Открыть новое окно Sequeler" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Импортировать подключениÑ" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Импорт ранее ÑкÑпортированных Sequeler-подключений" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Выберите файл" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Открыть" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Ðе удалоÑÑŒ импортировать библиотеку " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Ðайти таблицы" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "ПоиÑк таблиц…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Обновить таблицы" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Добавить таблицу" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Выберите базу данных -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "ТÐБЛИЦЫ" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Структура" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "Данные" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "ОтношениÑ" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "ЗапроÑ" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Уменьшить маÑштаб" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "МаÑштаб 1:1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Увеличить маÑштаб" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Ð’Ñ‹Ñокий контраÑÑ‚" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Solarized ÑветлаÑ" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Solarized тёмнаÑ" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Изменить Ñтиль текÑта" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Создать новую вкладку запроÑов" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Выберите таблицу" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "Выберите таблицу на панели Ñлева Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Ðет результатов" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Обновить результаты" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " ПолÑ" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтраница" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтраница" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d Ñтраниц" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Перейти к Ñтранице…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 Ñтраница" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d из %d Ñтраниц" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d ЗапиÑи" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " ОтношениÑ" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Выполнение запроÑа…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "ЭкÑпорт результатов" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "ЭкÑпортировать в CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "ЭкÑпортировать в текÑÑ‚" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Ðевозможно выполнить запроÑ!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d Общий результат" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½ уÑпешно! Строк обработано: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Выполнить запроÑ" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "ПодключитьÑÑ" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Изменить" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Дублировать Ñоединение" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Удалить" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "ÐаÑтройки" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Ошибка" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "на Ñтолбце" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Копировать %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (копиÑ)" #: src/Services/ActionManager.vala:254 msgid "Are you sure you want to delete this Database?" msgstr "Ð’Ñ‹ дейÑтвительно хотите удалить Ñту базу данных?" #: src/Services/ActionManager.vala:254 msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "Ð’Ñе таблицы и данные будут безвозвратно удалены." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Libssh2 не удалаÑÑŒ (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Ðе удалоÑÑŒ открыть Ñокет" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "Ðе удалоÑÑŒ подключитьÑÑ!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "Ошибка при запуÑке SSH ÑеÑÑии: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ удалаÑÑŒ!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ публичного ключа не удалаÑÑŒ!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Поддерживаемые методы аутентификации не найдены!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Ðе удалоÑÑŒ открыть проÑлушивание Ñокета" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "Ðе удалоÑÑŒ Ñоединить. Ваш порт базы данных может быть неправильным!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "Ðе удалоÑÑŒ поÑлушать!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Ðе удалоÑÑŒ принÑть удалённое Ñоединение!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "Ðе удалоÑÑŒ открыть прÑмой канал tcpip! (Обратите внимание, что Ñто может " "быть проблемой на Ñервере! ПроÑмотрите журналы Ñервера.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Ошибка!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "ОтÑутÑтвует файл SSH ключа!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "ОтÑутÑтвует публичный SSH ключ!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "Подключение" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Выбрать цвет ÑоединениÑ" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Имена подключений" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Тип БД:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Сервер:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Ð˜Ð¼Ñ Ð‘Ð”:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Пользователь:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Пароль:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Показать пароль" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Скрыть пароль" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Порт:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "ИÑпользовать SSL:" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Путь к файлу:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Выберите SQLite-файл…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "Подключение через SSH туннель:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "Сервер SSH:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ SSH:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "Пароль SSH:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "Порт SSH:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Ðе обÑзательно" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "Ð˜Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ SSH" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Выберите Ñвой файл идентификации…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "ОтÑутÑтвует публичный SSH ключ!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "Выберите SQLite-файл…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Создать SSH ключ" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "SSH-туннель" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Закрыть" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Сохранить" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "Проверить" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Открытие Ñ‚ÑƒÐ½Ð½ÐµÐ»Ñ SSH…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "Проверка подключениÑ…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "Подключение уÑпешно!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "Сохранение подключениÑ…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "Подключение Ñохранено!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "Подключение…" #~ msgid "Light background" #~ msgstr "Светлый фон" #~ msgid "Dark background" #~ msgstr "Тёмный фон" ellie-commons-sequeler-9963fb4/po/ta.po000066400000000000000000000533351512323162700200450ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-07-04 15:01+0000\n" "Last-Translator: தமிழà¯à®¨à¯‡à®°à®®à¯ \n" "Language-Team: Tamil \n" "Language: ta\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.13-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "கோபà¯à®ªà®•à®™à¯à®•ள௠ஆதரிகà¯à®•பà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "எனà¯à®© செயà¯à®µà®¤à¯ எனà¯à®±à¯ தெரியவிலà¯à®²à¯ˆ" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "à®®à¯à®±à¯à®±à®¿à®²à¯à®®à¯ எதிரà¯à®ªà®¾à®°à®¾à®¤ ஒனà¯à®±à¯ நடநà¯à®¤à®¤à¯" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "வெளியேறà¯à®±à®®à¯" #: src/Layouts/HeaderBar.vala:56 msgid "Create a new database" msgstr "பà¯à®¤à®¿à®¯ தரவà¯à®¤à®³à®¤à¯à®¤à¯ˆ உரà¯à®µà®¾à®•à¯à®•à¯" #: src/Layouts/HeaderBar.vala:65 msgid "Delete database" msgstr "தரவà¯à®¤à¯à®¤à®³à®¤à¯à®¤à¯ˆà®¤à¯ நீகà¯à®•à¯" #: src/Layouts/HeaderBar.vala:74 msgid "Database properties" msgstr "தரவà¯à®¤à¯à®¤à®³ பணà¯à®ªà¯à®•ளà¯" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "பà¯à®¤à®¿à®¯ சாளரமà¯" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "வெளியேறà¯" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "படà¯à®Ÿà®¿à®¯à®²à¯" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "%s உடன௠இணைகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "சேமிதà¯à®¤ இணைபà¯à®ªà¯à®•ளà¯" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "அனைதà¯à®¤à¯ˆà®¯à¯à®®à¯ நீகà¯à®•à¯" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "நூலகதà¯à®¤à¯ˆ மீணà¯à®Ÿà¯à®®à¯ à®à®±à¯à®±à®µà¯à®®à¯" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "à®à®±à¯à®±à¯à®®à®¤à®¿ நூலகமà¯" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "நீஙà¯à®•ள௠தொடர விரà¯à®®à¯à®ªà¯à®•ிறீரà¯à®•ளா?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "இநà¯à®¤ இணைபà¯à®ªà¯ˆ நீகà¯à®•à¯à®µà®¤à®©à¯ மூலம௠இநà¯à®¤à®¤à¯ தரவை மீடà¯à®Ÿà¯†à®Ÿà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "ஆமà¯, நீகà¯à®•à¯!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "எலà¯à®²à®¾ தரவà¯à®•ளà¯à®®à¯ நீகà¯à®•பà¯à®ªà®Ÿà¯à®®à¯, அதை நீஙà¯à®•ள௠மீடà¯à®Ÿà¯†à®Ÿà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "ஆமà¯, அனைதà¯à®¤à¯ˆà®¯à¯à®®à¯ நீகà¯à®•à¯!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "இணைகà¯à®• பயனரà¯à®ªà¯†à®¯à®°à¯ தேவை!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "ஒர௠கோபà¯à®ªà¯ˆ எடà¯" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_சேவà¯" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_CANCEL" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "%s உடன௠இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "நூலகதà¯à®¤à¯ˆ à®à®±à¯à®±à¯à®®à®¤à®¿ செயà¯à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "தொடரà¯à®šà¯à®šà®¿à®•à¯à®•௠வரà¯à®•" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "எநà¯à®¤ உளà¯à®³à®• அலà¯à®²à®¤à¯ தொலைநிலை தரவà¯à®¤à¯à®¤à®³à®¤à¯à®¤à¯à®Ÿà®©à¯ இணைகà¯à®•வà¯à®®à¯." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "பà¯à®¤à®¿à®¯ தரவà¯à®¤à¯à®¤à®³à®¤à¯à®¤à¯ˆà®šà¯ சேரà¯à®•à¯à®•வà¯à®®à¯" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "ஒர௠தரவà¯à®¤à¯à®¤à®³à®¤à¯à®¤à¯à®Ÿà®©à¯ இணைதà¯à®¤à¯ உஙà¯à®•ள௠நூலகதà¯à®¤à®¿à®²à¯ சேமிகà¯à®•வà¯à®®à¯" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "பà¯à®¤à®¿à®¯ தொடரà¯à®šà¯à®šà®¿à®¯à®¾à®© சாளரதà¯à®¤à¯ˆà®¤à¯ திறகà¯à®•வà¯à®®à¯" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "இணைபà¯à®ªà¯à®•ளை இறகà¯à®•à¯à®®à®¤à®¿ செயà¯à®¯à¯à®™à¯à®•ளà¯" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "à®®à¯à®©à¯à®©à®°à¯ à®à®±à¯à®±à¯à®®à®¤à®¿ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿ தொடரà¯à®šà¯à®šà®¿à®¯à®¾à®© இணைபà¯à®ªà¯à®•ளை இறகà¯à®•à¯à®®à®¤à®¿ செயà¯à®¯à¯à®™à¯à®•ளà¯" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "ஒர௠கோபà¯à®ªà¯ˆà®¤à¯ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_OPEN" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "நூலகதà¯à®¤à¯ˆ இறகà¯à®•à¯à®®à®¤à®¿ செயà¯à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "அடà¯à®Ÿà®µà®£à¯ˆà®•ளைத௠தேடà¯à®™à¯à®•ளà¯" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "அடà¯à®Ÿà®µà®£à¯ˆà®•ளைத௠தேடà¯à®™à¯à®•ளà¯â€¦" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "அடà¯à®Ÿà®µà®£à¯ˆà®•ளை மீணà¯à®Ÿà¯à®®à¯ à®à®±à¯à®±à®µà¯à®®à¯" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "அடà¯à®Ÿà®µà®£à¯ˆ சேரà¯à®•à¯à®•வà¯à®®à¯" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- தரவà¯à®¤à¯à®¤à®³à®¤à¯à®¤à¯ˆà®¤à¯ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•வà¯à®®à¯ -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "அடà¯à®Ÿà®µà®£à¯ˆà®•ளà¯" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "கடà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà¯" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "உளà¯à®³à®Ÿà®•à¯à®•à®®à¯" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "உறவà¯à®•ளà¯" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "வினவலà¯" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "சிறிதாகà¯à®•à¯" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "பெரிதாகà¯à®•௠1: 1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "பெரிதாகà¯à®•à¯" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "உயர௠வேறà¯à®ªà®¾à®Ÿà¯" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "சோலரிச௠லைடà¯" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "சோலரிச௠இரà¯à®£à¯à®Ÿ" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "உரை பாணியை மாறà¯à®±à®µà¯à®®à¯" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "பà¯à®¤à®¿à®¯ வினவல௠தாவலை உரà¯à®µà®¾à®•à¯à®•வà¯à®®à¯" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "வினவல௠%i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "அடà¯à®Ÿà®µà®£à¯ˆà®¯à¯ˆà®¤à¯ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•வà¯à®®à¯" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "" "இநà¯à®¤ பாரà¯à®µà¯ˆà®¯à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ இடத௠பகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¿à®¯à®¿à®²à¯ இரà¯à®¨à¯à®¤à¯ ஒர௠அடà¯à®Ÿà®µà®£à¯ˆà®¯à¯ˆà®¤à¯ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•வà¯à®®à¯." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "à®®à¯à®Ÿà®¿à®µà¯à®•ள௠எதà¯à®µà¯à®®à¯ கிடைகà¯à®•விலà¯à®²à¯ˆ" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "à®®à¯à®Ÿà®¿à®µà¯à®•ளை மீணà¯à®Ÿà¯à®®à¯ à®à®±à¯à®±à®µà¯à®®à¯" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " பà¯à®²à®™à¯à®•ளà¯" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "à®®à¯à®¨à¯à®¤à¯ˆà®¯ பகà¯à®•à®®à¯" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "அடà¯à®¤à¯à®¤ பகà¯à®•à®®à¯" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d பகà¯à®•à®™à¯à®•ளà¯" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "பகà¯à®•தà¯à®¤à®¿à®±à¯à®•௠செலà¯à®²à®µà¯à®®à¯â€¦" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 பகà¯à®•à®®à¯" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d பகà¯à®•à®™à¯à®•ளின௠%d" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d உளà¯à®³à¯€à®Ÿà¯à®•ளà¯" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " தடைகளà¯" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "இயஙà¯à®•à¯à®®à¯ வினவலà¯â€¦" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "à®à®±à¯à®±à¯à®®à®¤à®¿ à®®à¯à®Ÿà®¿à®µà¯à®•ளà¯" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "காபிம ஆக à®à®±à¯à®±à¯à®®à®¤à®¿" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "உரையாக à®à®±à¯à®±à¯à®®à®¤à®¿" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "வினவலை செயலாகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d மொதà¯à®¤ à®®à¯à®Ÿà®¿à®µà¯à®•ளà¯" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "வினவல௠வெறà¯à®±à®¿à®•ரமாக செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯! பாதிகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿ வரிசைகளà¯: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "வினவல௠செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "வினவலை இயகà¯à®•வà¯à®®à¯" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "இணை" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "இணைபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à¯" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "நகல௠இணைபà¯à®ªà¯" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "இணைபà¯à®ªà¯ˆ நீகà¯à®•à¯" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "விரà¯à®ªà¯à®ªà®™à¯à®•ளà¯" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "பிழை" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "நெடà¯à®µà®°à®¿à®šà¯ˆà®¯à®¿à®²à¯" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "%s நகலà¯" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (நகலà¯)" #: src/Services/ActionManager.vala:254 msgid "Are you sure you want to delete this Database?" msgstr "நீஙà¯à®•ள௠தரவà¯à®¤à®³à®¤à¯à®¤à¯ˆ நீகà¯à®• விரà¯à®®à¯à®ªà¯à®•ிறீரà¯à®•ளா?" #: src/Services/ActionManager.vala:254 msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "எலà¯à®²à®¾ அடà¯à®Ÿà®µà®£à¯ˆà®•ளà¯à®®à¯ தரவà¯à®•ளà¯à®®à¯ நீகà¯à®•பà¯à®ªà®Ÿà¯à®®à¯, அதை நீஙà¯à®•ள௠மீடà¯à®Ÿà¯†à®Ÿà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Libssh2 தà¯à®µà®•à¯à®•ம௠தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯ (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "சாகà¯à®•ெட௠திறகà¯à®•த௠தவறிவிடà¯à®Ÿà®¤à¯" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "இணைகà¯à®•த௠தவறிவிடà¯à®Ÿà®¤à¯!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "பாஓட௠அமரà¯à®µà¯ˆà®¤à¯ தொடஙà¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯ பிழை: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯ மூலம௠à®à®±à¯à®ªà¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "பொத௠விசையின௠à®à®±à¯à®ªà¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "உதவி à®…à®™à¯à®•ீகார à®®à¯à®±à¯ˆà®•ள௠எதà¯à®µà¯à®®à¯ கிடைகà¯à®•விலà¯à®²à¯ˆ!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "கேடà¯à®•à¯à®®à¯ சாகà¯à®•ெட௠திறகà¯à®•த௠தவறிவிடà¯à®Ÿà®¤à¯" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "பிணைகà¯à®•த௠தவறிவிடà¯à®Ÿà®¤à¯. உஙà¯à®•ள௠தரவà¯à®¤à¯à®¤à®³ தà¯à®±à¯ˆà®®à¯à®•ம௠தவறாக இரà¯à®•à¯à®•லாமà¯!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "கேடà¯à®•த௠தவறிவிடà¯à®Ÿà®¤à¯!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "தொலை இணைபà¯à®ªà¯ˆ à®à®±à¯à®•த௠தவறிவிடà¯à®Ÿà®¤à¯!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "நேரடி-TCPIP சேனலைத௠திறகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ! (இத௠சேவையகதà¯à®¤à®¿à®²à¯ ஒர௠சிகà¯à®•லாக இரà¯à®•à¯à®•லாம௠" "எனà¯à®ªà®¤à¯ˆ நினைவில௠கொளà¯à®•! சேவையக பதிவà¯à®•ளை மதிபà¯à®ªà®¾à®¯à¯à®µà¯ செயà¯à®¯à®µà¯à®®à¯.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "பிழை!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "பாஓட௠விசை கோபà¯à®ªà¯ இலà¯à®²à¯ˆ!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "பாஓட௠பொத௠விசையை காணவிலà¯à®²à¯ˆ!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "இணைபà¯à®ªà¯" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "இணைபà¯à®ªà¯ வணà¯à®£à®¤à¯à®¤à¯ˆà®¤à¯ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•வà¯à®®à¯" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "இணைபà¯à®ªà¯ பெயரà¯:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "இணைபà¯à®ªà®¿à®©à¯ பெயரà¯" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "தரவà¯à®¤à¯à®¤à®³ வகை:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "பà¯à®°à®µà®²à®©à¯:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "தரவà¯à®¤à¯à®¤à®³ பெயரà¯:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "பயனரà¯à®ªà¯†à®¯à®°à¯:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "கடவà¯à®šà¯à®šà¯†à®¾à®²à¯:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆà®•௠காடà¯à®Ÿà¯" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ மறைகà¯à®•வà¯à®®à¯" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "போரà¯à®Ÿà¯:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "பாகà¯à®… பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯:" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "கோபà¯à®ªà¯ பாதை:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "உஙà¯à®•ள௠SQLite கோபà¯à®ªà¯ˆà®¤à¯ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•வà¯à®®à¯â€¦" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "பாஓட௠சà¯à®°à®™à¯à®•பà¯à®ªà®¾à®¤à¯ˆ வழியாக இணைகà¯à®•வà¯à®®à¯:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "பாஓட௠ஓசà¯à®Ÿà¯:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "பாஓட௠பயனரà¯à®ªà¯†à®¯à®°à¯:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "பாஓட௠கடவà¯à®šà¯à®šà¯Šà®²à¯:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "பாஓட௠போரà¯à®Ÿà¯:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "விரà¯à®®à¯à®ªà®¿à®©à®¾à®²à¯" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "பாஓட௠அடையாளமà¯" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "உஙà¯à®•ள௠அடையாள கோபà¯à®ªà¯ˆà®¤à¯ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•வà¯à®®à¯â€¦" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "பாஓட௠பொத௠விசையை காணவிலà¯à®²à¯ˆ!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "உஙà¯à®•ள௠SQLite கோபà¯à®ªà¯ˆà®¤à¯ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•வà¯à®®à¯â€¦" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "பாஓட௠விசையை உரà¯à®µà®¾à®•à¯à®•à¯à®™à¯à®•ளà¯" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "பாஓட௠சà¯à®°à®™à¯à®•பà¯à®ªà®¾à®¤à¯ˆ" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "மூடà¯" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "இணைபà¯à®ªà¯ˆà®šà¯ சேமிகà¯à®•வà¯à®®à¯" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "சோதனை இணைபà¯à®ªà¯" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "பாஓட௠சà¯à®°à®™à¯à®•பà¯à®ªà®¾à®¤à¯ˆ திறதà¯à®¤à®²à¯â€¦" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "சோதனை இணைபà¯à®ªà¯â€¦" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "வெறà¯à®±à®¿à®•ரமாக இணைகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "இணைபà¯à®ªà¯ சேமிபà¯à®ªà¯â€¦" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "இணைபà¯à®ªà¯ சேமிகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "இணைதà¯à®¤à®²à¯â€¦" #~ msgid "Light background" #~ msgstr "ஒளி பினà¯à®©à®£à®¿" #~ msgid "Dark background" #~ msgstr "இரà¯à®£à¯à®Ÿ பினà¯à®©à®£à®¿" ellie-commons-sequeler-9963fb4/po/tr.po000066400000000000000000000400271512323162700200600ustar00rootroot00000000000000# Turkish translations for io.github.ellie_commons.sequeler package. # Copyright (C) 2020 THE io.github.ellie_commons.sequeler'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # ÇaÄŸatay YiÄŸit Åžahin , 2020. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2025-10-11 09:10+0000\n" "Last-Translator: OÄŸuz Ersen \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.14-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Dizinler desteklenmiyor" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Ne yapılacağı bilinmiyor" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "Tamamıyla beklenmeyen bir ÅŸey oldu" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Çıkış" #: src/Layouts/HeaderBar.vala:56 msgid "Create a new database" msgstr "Yeni bir veri tabanı oluÅŸturun" #: src/Layouts/HeaderBar.vala:65 msgid "Delete database" msgstr "Veri tabanını sil" #: src/Layouts/HeaderBar.vala:74 msgid "Database properties" msgstr "Veri tabanı özellikleri" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Yeni Pencere" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Yeni BaÄŸlantı" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Çık" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Menü" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "%s ile baÄŸlantı kuruldu" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "KAYITLI BAÄžLANTILAR" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Hepsini Sil" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Kütüphaneyi Yeniden Yükle" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "Kütüphaneyi Dışa Aktar" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Devam etmek istediÄŸinize emin misiniz?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "Bu baÄŸlantıyı silerek, bu verileri kurtaramayacaksınız." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Evet, Sil!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "Tüm veriler silinecek ve bunları kurtaramayacaksınız." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Evet, Hepsini Sil!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "BaÄŸlanmak için bir kullanıcı adı gerekli!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Dosya seç" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Kaydet" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_İptal Et" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "%s ile BaÄŸlantı Kurulamıyor" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Kütüphane Dışa Aktarılamıyor " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Sequeler‘a HoÅŸ Geldiniz" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "Herhangi Bir Yerel veya Uzak Veri Tabanına BaÄŸlanın." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Yeni Bir Veri Tabanı Ekle" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "Bir Veri Tabanına BaÄŸlanın ve Kütüphanenize Kaydedin" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Yeni Bir Sequeler Penceresi Açın" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "BaÄŸlantıları İçe Aktar" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Önceden Dışa Aktarılmış Sequeler BaÄŸlantılarını İçe Aktarın" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Dosya seç" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Aç" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Kütüphane İçe Aktarılamıyor " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Tabloları Ara" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Tabloları Ara…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Tabloları Yeniden Yükle" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Tablo Ekle" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Veri Tabanı Seç -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "TABLOLAR" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Yapı" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "İçerik" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "İliÅŸkiler" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Sorgu" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "UzaklaÅŸtır" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "YakınlaÅŸtırmayı sıfırla" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "YakınlaÅŸtır" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "Yüksek Karşıtlık" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Solarized Açık" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Solarized Koyu" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Metin Tarzını DeÄŸiÅŸtir" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Yeni bir sorgu sekmesi oluÅŸturun" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Sorgu %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Tablo Seç" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "" "Bu görünümü etkinleÅŸtirmek için soldaki kenar çubuÄŸundan bir tablo seçin." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Sonuç Yok" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Sonuçları Yeniden Yükle" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " Alanlar" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "Önceki Sayfa" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "Sonraki Sayfa" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d Sayfa" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Sayfaya atla…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 Sayfa" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "Sayfa %d / %d" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d Girdi" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " Kısıtlar" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Sorgu Çalıştırılıyor…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "Sonuçları Dışa Aktar" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "CSV Olarak Dışa Aktar" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "Metin Olarak Dışa Aktar" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Sorgu iÅŸlenemedi!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "%d Toplam Sonuç" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Sorgu BaÅŸarıyla Çalıştırıldı! Etkilenen Satırlar: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Sorgu Çalıştırıldı!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "Sorguyu Çalıştır" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "BaÄŸlan" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "BaÄŸlantıyı Düzenle" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "BaÄŸlantıyı ÇoÄŸalt" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "BaÄŸlantıyı Sil" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "Seçenekler" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Hata" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "Sütun" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "%s kopyala" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (kopyala)" #: src/Services/ActionManager.vala:254 msgid "Are you sure you want to delete this Database?" msgstr "Bu veri tabanını silmek istediÄŸinizden emin misiniz?" #: src/Services/ActionManager.vala:254 msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "Tüm tablolar ve veriler silinecek ve bunları kurtaramayacaksınız." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Libssh2 baÅŸlatma baÅŸarısız oldu (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Soket açma baÅŸarısız oldu" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "BaÄŸlantı baÅŸarısız oldu!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "SSH oturumu baÅŸlatılırken hata oluÅŸtu: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "Parola ile kimlik doÄŸrulama baÅŸarısız oldu!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "Ortak anahtar ile kimlik doÄŸrulama baÅŸarısız oldu!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Desteklenen kimlik doÄŸrulama yöntemi bulunamadı!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Dinleme soketi açma baÅŸarısız oldu" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "BaÄŸlama baÅŸarısız oldu. Veri tabanı baÄŸlantı noktanız yanlış olabilir!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "Dinleme baÅŸarısız oldu!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Uzaktan baÄŸlantı kabul etme baÅŸarısız oldu!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "direct-tcpip kanalı açılamadı! (Bu sorunun sunucuda olabileceÄŸini unutmayın! " "Lütfen sunucu günlüklerini inceleyin.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Hata!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "SSH anahtar dosyası eksik!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "SSH ortak anahtarı eksik!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "BaÄŸlantı" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "BaÄŸlantı rengini seçin" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "BaÄŸlantı Adı:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "BaÄŸlantının adı" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Veri Tabanı Türü:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "Ana Makine:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Veri Tabanı Adı:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Kullanıcı Adı:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Parola:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Parolayı göster" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Parolayı gizle" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "BaÄŸlantı Noktası:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "SSL kullan:" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "Dosya Yolu:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "SQLite Dosyanızı Seçin…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "SSH Tüneli ile BaÄŸlan:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "SSH Ana Makinesi:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "SSH Kullanıcı Adı:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "SSH Parolası:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "SSH BaÄŸlantı Noktası:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "İsteÄŸe BaÄŸlı" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "SSH KimliÄŸi" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Kimlik Dosyanızı Seçin…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "SSH ortak anahtarı eksik!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "SQLite Dosyanızı Seçin…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "SSH Anahtarı OluÅŸtur" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "SSH Tüneli" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Kapat" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "BaÄŸlantıyı Kaydet" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "BaÄŸlantıyı Sına" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "SSH Tüneli açılıyor…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "BaÄŸlantı Sınanıyor…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "BaÄŸlantı BaÅŸarılı!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "BaÄŸlantı Kaydediliyor…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "BaÄŸlantı Kaydedildi!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "BaÄŸlanıyor…" #~ msgid "Light background" #~ msgstr "Açık arka plan" #~ msgid "Dark background" #~ msgstr "Koyu arka plan" ellie-commons-sequeler-9963fb4/po/uk.po000066400000000000000000000443771512323162700200660ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2020-09-16 20:36+0000\n" "Last-Translator: ihor_ck \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.3-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "Директорії не підтримуютьÑÑ" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "Ðе знаю, що робити" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "СталоÑÑ Ð´ÐµÑ‰Ð¾ неочікуване" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "Від'єднатиÑÑ" #: src/Layouts/HeaderBar.vala:56 #, fuzzy #| msgid "Create a new Query Tab" msgid "Create a new database" msgstr "Створити нову вкладку запитів" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- Вибрати базу даних -" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "Тип бази даних:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "Ðове вікно" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "Ðове з'єднаннÑ" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "Вийти" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "Меню" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "Під'єднано до %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "ЗБЕРЕЖЕÐІ З'ЄДÐÐÐÐЯ" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "Видалити вÑе" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "Оновити бібліотеку" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "ЕкÑпортувати бібліотеку" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "Ви впевнені, що хочете продовжити?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "Видаливши це з'єднаннÑ, ви не зможете відновити ці дані." #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "Так, видалити!" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "Ð’ÑÑ– дані буде видалено, Ñ– ви не зможете Ñ—Ñ… відновити." #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "Так, видалити вÑе!" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "Ð”Ð»Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½ÐµÐ¾Ð±Ñ…Ñ–Ð´Ð½Ðµ ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача!" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "Виберіть файл" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "_Зберегти" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "_СкаÑувати" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "Ðе можливо з'єднатиÑÑ Ð· %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "Ðе можливо екÑпортувати бібліотеку " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "Вітаємо в Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "Під'єднайтеÑÑŒ до будь-Ñкої локальної чи віддаленої бази даних." #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "Додати нову базу даних" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "З'єднатиÑÑŒ з базою даних та додати Ñ—Ñ— до вашої бібліотеки" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "Відкрити нове вікно Sequeler" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "Імпортувати з'єднаннÑ" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "Імпортувати попередньо екÑпортовані з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Sequeler" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "Виділити файл" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "_Відкрити" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "Ðе вдалоÑÑŒ імпортувати бібліотеку " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "Шукати таблиці" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "Пошук таблиць…" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "Оновити таблиці" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "Додати таблицю" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- Вибрати базу даних -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "ТÐБЛИЦІ" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "Структура" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "ВміÑÑ‚" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "Зв'Ñзки" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "Запит" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "Зменшити" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "МаÑштаб 1:1" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "Збільшити" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "ВиÑока контраÑтніÑть" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "Solarized Ñвітла" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "Solarized темна" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "Змінити Ñтиль текÑту" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "Створити нову вкладку запитів" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "Запит %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "Вибрати таблицю" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "Вибрати таблицю у лівій бічній панелі, щоб увімкнути це поданнÑ." #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "Ðемає доÑтупних результатів" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "Оновити результати" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr " ПолÑ" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ Ñторінка" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "ÐаÑтупна Ñторінка" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d Ñторінки" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "Стрибнути до Ñторінки…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 Ñторінка" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%d з %d Ñторінок" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d запиÑи" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " ОбмеженнÑ" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "Працює запит…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "ЕкÑпортувати результат" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "ЕкÑпортувати Ñк CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "ЕкÑпортувати Ñк текÑÑ‚" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "Ðе вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ запит!" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "Ð’Ñього %d результатів" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "Запит уÑпішно виконано! Уражені Ñ€Ñдки: %s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "Запит очікуєтьÑÑ!" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "ЗапуÑтити запит" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "З'єднати" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "Змінити з'єднаннÑ" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "Дублювати з'єднаннÑ" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "Видалити з'єднаннÑ" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "ВлаÑтивоÑті" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "Помилка" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "на Ñтовпці" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "Копіювати %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (копіÑ)" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "Are you sure you want to proceed?" msgid "Are you sure you want to delete this Database?" msgstr "Ви впевнені, що хочете продовжити?" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "All the data will be deleted and you won’t be able to recover it." msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "Ð’ÑÑ– дані буде видалено, Ñ– ви не зможете Ñ—Ñ… відновити." #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Libssh2 Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð½Ðµ вдалаÑÑŒ (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "Ðе вдалоÑÑŒ відкрити Ñокет" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "Ðе вдалоÑÑŒ з'єднатиÑÑŒ!" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "Помилка на Ñтарті SSH ÑеанÑу: %d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "Ðе вдалаÑÑ Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð·Ð° допомогою паролÑ!" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "Ðе вдалаÑÑ Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð¿ÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð¸Ð¼ ключем!" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "Ðе знайдено підтримуваних методів автентифікації!" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "Ðе вдалоÑÑŒ відкрити гніздо проÑлуханнÑ" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "Ðе вдалоÑÑŒ з'єднати. Ваш порт бази даних може бути хибним!" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "Ðе вдалоÑÑŒ проÑлухати!" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "Ðе вдалоÑÑŒ прийнÑти віддалене з'єднаннÑ!" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ прÑмий tcpip канал! (Зауважте, що це може бути проблемою " "на Ñервері! ПереглÑньте журнали Ñервера.)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "Помилка!" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "ВідÑутній файл SSH-ключа!" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "ВідÑутній публічний ключ SSH!" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "З'єднаннÑ" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "Оберіть колір з'єднаннÑ" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "Ðазва з'єднаннÑ:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "Ðазви з'єднань" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "Тип бази даних:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "ХоÑÑ‚:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "Ðазва бази даних:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "Пароль:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "Показати пароль" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "Приховати пароль" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "Порт:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "ШлÑÑ… файлу:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "Оберіть Ваш SQLite файл…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "З'єднати з SSH тунелем:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "SSH хоÑÑ‚:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "SSH ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "SSH пароль:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "SSH порт:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "Ðеобов'Ñзковий" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "Ð†Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ SSH" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "Оберіть Ваш файл ідентифікації…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "ВідÑутній публічний ключ SSH!" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "Оберіть Ваш SQLite файл…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "Згенерувати SSH ключ" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "SSH тунель" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "Закрити" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "Зберегти з'єднаннÑ" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "ТеÑÑ‚ з'єднаннÑ" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "Відкрити SSH тунель…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "ТеÑтуєтьÑÑ Ð·'єднаннÑ…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "УÑпішно з'єднано!" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "ЗберігаєтьÑÑ Ð·'єднаннÑ…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾!" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "З'єднаннÑ…" #~ msgid "Light background" #~ msgstr "Світле тло" #~ msgid "Dark background" #~ msgstr "Темне тло" ellie-commons-sequeler-9963fb4/po/zh_CN.po000066400000000000000000000364521512323162700204430ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2021-04-09 12:45+0000\n" "Last-Translator: Yangfl \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.6-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "䏿”¯æŒç›®å½•" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "ä¸çŸ¥é“åšä»€ä¹ˆ" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "å‘ç”Ÿäº†å®Œå…¨å‡ºä¹Žæ„æ–™çš„事" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "登出" #: src/Layouts/HeaderBar.vala:56 #, fuzzy #| msgid "Create a new Query Tab" msgid "Create a new database" msgstr "创建新查询选项å¡" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- 选择数æ®åº“ -" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "æ•°æ®åº“类型:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "新窗å£" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "新连接" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "退出" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "目录" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "已连接至 %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "å·²ä¿æŒè¿žæŽ¥" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "删除全部" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "é‡è½½åº“" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "导出库" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "您确定è¦ç»§ç»­å—?" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "删除此连接åŽï¼Œæ‚¨å°†æ— æ³•æ¢å¤æ­¤æ•°æ®ã€‚" #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "是,删除ï¼" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "所有数æ®å°†è¢«åˆ é™¤ï¼Œæ‚¨å°†æ— æ³•æ¢å¤ã€‚" #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "是,删除全部ï¼" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "需è¦ç”¨æˆ·åæ‰èƒ½è¿žæŽ¥ï¼" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "选择文件" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "ä¿å­˜(_S)" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "å–æ¶ˆ(_S)" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "无法连接到 %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "无法导出库 " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "欢迎æ¥åˆ° Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "连接到任何本地或远程数æ®åº“。" #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "添加一个新的数æ®åº“" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "连接到数æ®åº“并将其ä¿å­˜åœ¨æ‚¨çš„库中" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "打开新的 Sequeler 窗å£" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "导入连接" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "导入先å‰å¯¼å‡ºçš„ Sequeler 连接" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "选择文件" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "打开(_O)" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "无法导入库 " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "æœç´¢è¡¨" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "æœç´¢è¡¨â€¦" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "刷新表" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "添加表" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- 选择数æ®åº“ -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "表" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "结构" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "内容" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "关系" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "查询" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "缩å°" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "原始缩放" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "放大" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "高对比度" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "更改文字样å¼" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "创建新查询选项å¡" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "查询 %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "选择表" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "从左边æ ä¸­é€‰æ‹©ä¸€ä¸ªè¡¨æ ¼ä»¥æ¿€æ´»æ­¤è§†å›¾ã€‚" #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "æ— å¯ç”¨ç»“æžœ" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "刷新结果" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr "" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "å‰ä¸€é¡µ" #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "åŽä¸€é¡µ" #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d 页" #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "跳至页…" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 页" #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%2$d 页中的第 %1$d 页" #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d æ¡" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " 约æŸ" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "正在è¿è¡ŒæŸ¥è¯¢â€¦" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "导出结果" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "导出为 CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "导出为文本文件" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "æ— æ³•å¤„ç†æŸ¥è¯¢ï¼" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "å…± %d æ¡ç»“æžœ" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "æˆåŠŸæ‰§è¡ŒæŸ¥è¯¢ï¼ å—å½±å“的行:%s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "查询已执行ï¼" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "è¿è¡ŒæŸ¥è¯¢" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "连接" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "编辑连接" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "å¤åˆ¶è¿žæŽ¥" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "删除连接" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "选项" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "错误" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "于列" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "å¤åˆ¶ %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (å¤åˆ¶)" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "Are you sure you want to proceed?" msgid "Are you sure you want to delete this Database?" msgstr "您确定è¦ç»§ç»­å—?" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "All the data will be deleted and you won’t be able to recover it." msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "所有数æ®å°†è¢«åˆ é™¤ï¼Œæ‚¨å°†æ— æ³•æ¢å¤ã€‚" #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Libssh2åˆå§‹åŒ–失败 (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "打开套接字失败" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "连接失败ï¼" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "å¯åЍ SSH ä¼šè¯æ—¶å‡ºé”™ï¼š%d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "密ç è®¤è¯å¤±è´¥ï¼" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "公钥认è¯å¤±è´¥ï¼" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "找ä¸åˆ°æ”¯æŒçš„èº«ä»½éªŒè¯æ–¹æ³•ï¼" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "无法打开监å¬å¥—接字" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "绑定失败。 æ•°æ®åº“端å£å¯èƒ½æœ‰è¯¯ï¼" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "监å¬å¤±è´¥ï¼" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "无法接å—远程连接ï¼" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "无法打开直接 tcpip 通é“ï¼(请注æ„,这å¯èƒ½æ˜¯æœåŠ¡å™¨ä¸Šçš„é—®é¢˜ï¼è¯·æŸ¥çœ‹æœåŠ¡å™¨æ—¥å¿—ã€‚)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "错误ï¼" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "缺少 SSH 密钥文件ï¼" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "缺少 SSH 公钥ï¼" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "连接" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "选择连接颜色" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "连接å:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "连接åç§°" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "æ•°æ®åº“类型:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "主机:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "æ•°æ®åº“å:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "用户å:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "密ç ï¼š" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "显示密ç " #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "éšè—密ç " #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "端å£ï¼š" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "文件路径:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "选择您的 SQLite 文件…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "通过 SSH éš§é“连接:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "SSH 主机:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "SSH 用户å:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "SSH 密ç ï¼š" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "SSH 端å£ï¼š" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "å¯é€‰" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "SSH 身份" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "é€‰æ‹©æ‚¨çš„èº«ä»½éªŒè¯æ–‡ä»¶â€¦" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "缺少 SSH 公钥ï¼" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "选择您的 SQLite 文件…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "ç”Ÿæˆ SSH 密钥" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "SSH éš§é“" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "关闭" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "ä¿å­˜è¿žæŽ¥" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "测试连接" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "正在打开 SSH éš§é“…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "正在测试连接…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "å·²æˆåŠŸè¿žæŽ¥ï¼" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "正在ä¿å­˜è¿žæŽ¥â€¦" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "连接已ä¿å­˜ï¼" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "连接中…" #~ msgid "Light background" #~ msgstr "浅色背景" #~ msgid "Dark background" #~ msgstr "深色背景" ellie-commons-sequeler-9963fb4/po/zh_TW.po000066400000000000000000000365001512323162700204670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.ellie_commons.sequeler package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: io.github.ellie_commons.sequeler\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-24 13:44+0000\n" "PO-Revision-Date: 2021-04-10 13:27+0000\n" "Last-Translator: Yangfl \n" "Language-Team: Chinese (Traditional) \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.6-dev\n" #: src/Application.vala:67 msgid "Directories are not supported" msgstr "䏿”¯æ´ç›®éŒ„" #: src/Application.vala:73 msgid "Don't know what to do" msgstr "ä¸çŸ¥é“åšä»€éº¼" #: src/Application.vala:85 msgid "Something completely unexpected happened" msgstr "ç™¼ç”Ÿäº†å®Œå…¨å‡ºä¹Žæ„æ–™çš„事" #: src/Layouts/HeaderBar.vala:51 msgid "Logout" msgstr "登出" #: src/Layouts/HeaderBar.vala:56 #, fuzzy #| msgid "Create a new Query Tab" msgid "Create a new database" msgstr "建立新查詢é¸é …å¡" #: src/Layouts/HeaderBar.vala:65 #, fuzzy #| msgid "- Select Database -" msgid "Delete database" msgstr "- 鏿“‡è³‡æ–™åº« -" #: src/Layouts/HeaderBar.vala:74 #, fuzzy #| msgid "Database Type:" msgid "Database properties" msgstr "資料庫型別:" #: src/Layouts/HeaderBar.vala:87 src/Layouts/Welcome.vala:39 msgid "New Window" msgstr "新視窗" #: src/Layouts/HeaderBar.vala:90 src/Widgets/ConnectionDialog.vala:137 #: src/Widgets/ConnectionDialog.vala:172 msgid "New Connection" msgstr "新連線" #: src/Layouts/HeaderBar.vala:93 msgid "Quit" msgstr "退出" #: src/Layouts/HeaderBar.vala:113 msgid "Menu" msgstr "目錄" #: src/Layouts/Main.vala:77 #, c-format msgid "Connected to %s" msgstr "已連線至 %s" #: src/Layouts/Library.vala:65 msgid "SAVED CONNECTIONS" msgstr "å·²ä¿æŒé€£ç·š" #: src/Layouts/Library.vala:74 msgid "Delete All" msgstr "刪除全部" #: src/Layouts/Library.vala:81 msgid "Reload Library" msgstr "éŽè¼‰åº«" #: src/Layouts/Library.vala:84 msgid "Export Library" msgstr "匯出庫" #: src/Layouts/Library.vala:215 src/Layouts/Library.vala:233 msgid "Are you sure you want to proceed?" msgstr "您確定è¦ç¹¼çºŒå—Žï¼Ÿ" #: src/Layouts/Library.vala:215 msgid "By deleting this connection you won’t be able to recover this data." msgstr "刪除此連線後,您將無法æ¢å¾©æ­¤è³‡æ–™ã€‚" #: src/Layouts/Library.vala:218 src/Services/ActionManager.vala:257 msgid "Yes, Delete!" msgstr "是,刪除ï¼" #: src/Layouts/Library.vala:233 msgid "All the data will be deleted and you won’t be able to recover it." msgstr "所有資料將被刪除,您將無法æ¢å¾©ã€‚" #: src/Layouts/Library.vala:236 msgid "Yes, Delete All!" msgstr "是,刪除全部ï¼" #: src/Layouts/Library.vala:335 src/Widgets/ConnectionDialog.vala:627 #: src/Widgets/ConnectionDialog.vala:648 msgid "A username is required in order to connect!" msgstr "需è¦ä½¿ç”¨è€…å稱æ‰èƒ½é€£ç·šï¼" #: src/Layouts/Library.vala:409 src/Layouts/Views/Query.vala:555 msgid "Pick a file" msgstr "鏿“‡æª”案" #: src/Layouts/Library.vala:412 src/Layouts/Views/Query.vala:558 msgid "_Save" msgstr "儲存(_S)" #: src/Layouts/Library.vala:413 src/Layouts/Welcome.vala:62 #: src/Layouts/Views/Query.vala:559 msgid "_Cancel" msgstr "å–æ¶ˆ(_S)" #: src/Layouts/Library.vala:472 #, c-format msgid "Unable to Connect to %s" msgstr "無法連線到 %s" #: src/Layouts/Library.vala:485 msgid "Unable to Export Library " msgstr "無法匯出庫 " #: src/Layouts/Welcome.vala:28 msgid "Welcome to Sequeler" msgstr "歡迎來到 Sequeler" #: src/Layouts/Welcome.vala:29 msgid "Connect to Any Local or Remote Database." msgstr "連線到任何本地或é ç«¯è³‡æ–™åº«ã€‚" #: src/Layouts/Welcome.vala:38 msgid "Add a New Database" msgstr "新增一個新的資料庫" #: src/Layouts/Welcome.vala:38 msgid "Connect to a Database and Save It in Your Library" msgstr "連線到資料庫並將其儲存在您的庫中" #: src/Layouts/Welcome.vala:39 msgid "Open a New Sequeler Window" msgstr "開啟新的 Sequeler 視窗" #: src/Layouts/Welcome.vala:40 msgid "Import Connections" msgstr "匯入連線" #: src/Layouts/Welcome.vala:40 msgid "Import Previously Exported Sequeler Connections" msgstr "匯入先å‰åŒ¯å‡ºçš„ Sequeler 連線" #: src/Layouts/Welcome.vala:58 msgid "Select a file" msgstr "鏿“‡æª”案" #: src/Layouts/Welcome.vala:61 msgid "_Open" msgstr "開啟(_O)" #: src/Layouts/Welcome.vala:107 msgid "Unable to Import Library " msgstr "無法匯入庫 " #: src/Layouts/DataBaseSchema.vala:80 msgid "Search Tables" msgstr "æœå°‹è¡¨" #: src/Layouts/DataBaseSchema.vala:92 msgid "Search Tables…" msgstr "æœå°‹è¡¨â€¦" #: src/Layouts/DataBaseSchema.vala:114 msgid "Reload Tables" msgstr "釿–°æ•´ç†è¡¨" #: src/Layouts/DataBaseSchema.vala:119 msgid "Add Table" msgstr "新增表" #: src/Layouts/DataBaseSchema.vala:176 msgid "- Select Database -" msgstr "- 鏿“‡è³‡æ–™åº« -" #: src/Layouts/DataBaseSchema.vala:298 msgid "TABLES" msgstr "表" #: src/Layouts/DataBaseView.vala:49 msgid "Structure" msgstr "çµæ§‹" #: src/Layouts/DataBaseView.vala:50 msgid "Content" msgstr "內容" #: src/Layouts/DataBaseView.vala:51 msgid "Relations" msgstr "關係" #: src/Layouts/DataBaseView.vala:52 src/Layouts/DataBaseView.vala:228 #: src/Layouts/DataBaseView.vala:256 msgid "Query" msgstr "查詢" #: src/Layouts/DataBaseView.vala:100 msgid "Zoom Out" msgstr "縮å°" #: src/Layouts/DataBaseView.vala:106 msgid "Zoom 1:1" msgstr "原始縮放" #: src/Layouts/DataBaseView.vala:110 msgid "Zoom In" msgstr "放大" #: src/Layouts/DataBaseView.vala:123 msgid "High Contrast" msgstr "é«˜å°æ¯”度" #: src/Layouts/DataBaseView.vala:131 msgid "Solarized Light" msgstr "" #: src/Layouts/DataBaseView.vala:139 msgid "Solarized Dark" msgstr "" #: src/Layouts/DataBaseView.vala:162 msgid "Change Text Style" msgstr "更改文字樣å¼" #: src/Layouts/DataBaseView.vala:221 msgid "Create a new Query Tab" msgstr "建立新查詢é¸é …å¡" #: src/Layouts/DataBaseView.vala:241 #, c-format msgid "Query %i" msgstr "查詢 %i" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select Table" msgstr "鏿“‡è¡¨" #: src/Layouts/Views/Structure.vala:78 src/Layouts/Views/Content.vala:89 #: src/Layouts/Views/Relations.vala:77 msgid "Select a table from the left sidebar to activate this view." msgstr "å¾žå·¦é‚Šæ¬„ä¸­é¸æ“‡ä¸€å€‹è¡¨æ ¼ä»¥å•Ÿç”¨æ­¤æª¢è¦–。" #: src/Layouts/Views/Structure.vala:108 src/Layouts/Views/Structure.vala:146 #: src/Layouts/Views/Content.vala:180 src/Layouts/Views/Content.vala:219 #: src/Layouts/Views/Relations.vala:107 src/Layouts/Views/Relations.vala:145 #: src/Layouts/Views/Query.vala:317 msgid "No Results Available" msgstr "ç„¡å¯ç”¨çµæžœ" #: src/Layouts/Views/Structure.vala:119 src/Layouts/Views/Content.vala:192 #: src/Layouts/Views/Relations.vala:118 msgid "Reload Results" msgstr "釿–°æ•´ç†çµæžœ" #: src/Layouts/Views/Structure.vala:198 msgid " Fields" msgstr "" #: src/Layouts/Views/Content.vala:122 msgid "Previous Page" msgstr "å‰ä¸€é " #: src/Layouts/Views/Content.vala:127 msgid "Next Page" msgstr "後一é " #: src/Layouts/Views/Content.vala:132 #, c-format msgid "%d Pages" msgstr "%d é " #: src/Layouts/Views/Content.vala:135 msgid "Jump to page…" msgstr "跳至é â€¦" #: src/Layouts/Views/Content.vala:166 msgid "1 Page" msgstr "1 é " #: src/Layouts/Views/Content.vala:172 #, c-format msgid "%d of %d Pages" msgstr "%2$d é ä¸­çš„第 %1$d é " #: src/Layouts/Views/Content.vala:276 #, c-format msgid "%d Entries" msgstr "%d æ¢" #: src/Layouts/Views/Relations.vala:198 msgid " Constraints" msgstr " ç´„æŸ" #: src/Layouts/Views/Query.vala:280 msgid "Running Query…" msgstr "正在執行查詢…" #: src/Layouts/Views/Query.vala:350 msgid "Export Results" msgstr "åŒ¯å‡ºçµæžœ" #: src/Layouts/Views/Query.vala:363 msgid "Export as CSV" msgstr "匯出為 CSV" #: src/Layouts/Views/Query.vala:371 msgid "Export as Text" msgstr "匯出為文字檔案" #: src/Layouts/Views/Query.vala:463 src/Layouts/Views/Query.vala:509 msgid "Unable to process Query!" msgstr "ç„¡æ³•è™•ç†æŸ¥è©¢ï¼" #: src/Layouts/Views/Query.vala:484 #, c-format msgid "%d Total Results" msgstr "å…± %d æ¢çµæžœ" #: src/Layouts/Views/Query.vala:519 #, c-format msgid "Query Successfully Executed! Rows Affected: %s" msgstr "æˆåŠŸåŸ·è¡ŒæŸ¥è©¢ï¼ å—影響的行:%s" #: src/Layouts/Views/Query.vala:522 msgid "Query Executed!" msgstr "查詢已執行ï¼" #: src/Partials/Helpers.vala:130 src/Partials/Helpers.vala:136 msgid "Run Query" msgstr "執行查詢" #: src/Partials/LibraryItem.vala:107 src/Widgets/ConnectionDialog.vala:465 msgid "Connect" msgstr "連線" #: src/Partials/LibraryItem.vala:110 msgid "Edit Connection" msgstr "編輯連線" #: src/Partials/LibraryItem.vala:113 msgid "Duplicate Connection" msgstr "複製連線" #: src/Partials/LibraryItem.vala:116 msgid "Delete Connection" msgstr "刪除連線" #: src/Partials/LibraryItem.vala:126 msgid "Options" msgstr "é¸é …" #: src/Partials/TreeBuilder.vala:132 msgid "Error" msgstr "錯誤" #: src/Partials/TreeBuilder.vala:132 msgid "on Column" msgstr "於列" #: src/Partials/TreeBuilder.vala:173 #, c-format msgid "Copy %s" msgstr "複製 %s" #: src/Services/Settings.vala:99 #, c-format msgid "%s (copy)" msgstr "%s (複製)" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "Are you sure you want to proceed?" msgid "Are you sure you want to delete this Database?" msgstr "您確定è¦ç¹¼çºŒå—Žï¼Ÿ" #: src/Services/ActionManager.vala:254 #, fuzzy #| msgid "All the data will be deleted and you won’t be able to recover it." msgid "" "All the tables and data will be deleted and you won’t be able to recover it." msgstr "所有資料將被刪除,您將無法æ¢å¾©ã€‚" #: src/Services/ConnectionManager.vala:196 #, c-format msgid "Libssh2 initialization failed (%d)" msgstr "Libssh2åˆå§‹åŒ–失敗 (%d)" #: src/Services/ConnectionManager.vala:205 msgid "Failed to open socket" msgstr "開啟套接字失敗" #: src/Services/ConnectionManager.vala:214 msgid "Failed to connect!" msgstr "連線失敗ï¼" #: src/Services/ConnectionManager.vala:226 #, c-format msgid "Error when starting up SSH session: %d" msgstr "啟動 SSH 會話時出錯:%d" #: src/Services/ConnectionManager.vala:245 msgid "Authentication by password failed!" msgstr "密碼èªè­‰å¤±æ•—ï¼" #: src/Services/ConnectionManager.vala:255 msgid "Authentication by public key failed!" msgstr "公鑰èªè­‰å¤±æ•—ï¼" #: src/Services/ConnectionManager.vala:262 msgid "No supported authentication methods found!" msgstr "找ä¸åˆ°æ”¯æ´çš„身份驗證方法ï¼" #: src/Services/ConnectionManager.vala:269 msgid "Failed to open listen socket" msgstr "無法開啟監è½å¥—接字" #: src/Services/ConnectionManager.vala:284 msgid "Failed to bind. Your Database Port may be wrong!" msgstr "繫çµå¤±æ•—。 資料庫埠å¯èƒ½æœ‰èª¤ï¼" #: src/Services/ConnectionManager.vala:290 msgid "Failed to listen!" msgstr "監è½å¤±æ•—ï¼" #: src/Services/ConnectionManager.vala:317 msgid "Failed to accept remote connection!" msgstr "無法接å—é ç«¯é€£ç·šï¼" #: src/Services/ConnectionManager.vala:326 msgid "" "Could not open the direct-tcpip channel! (Note that this can be a problem at " "the server! Please review the server logs.)" msgstr "" "無法開啟直接 tcpip 通é“ï¼(請注æ„,這å¯èƒ½æ˜¯ä¼ºæœå™¨ä¸Šçš„å•題ï¼è«‹æª¢è¦–伺æœå™¨æ—¥èªŒã€‚)" #: src/Services/ConnectionManager.vala:581 msgid "Error!" msgstr "錯誤ï¼" #: src/Widgets/ConnectionDialog.vala:35 msgid "Missing SSH Key file!" msgstr "缺少 SSH 金鑰檔案ï¼" #: src/Widgets/ConnectionDialog.vala:36 msgid "Missing SSH public key!" msgstr "缺少 SSH 公鑰ï¼" #: src/Widgets/ConnectionDialog.vala:96 src/Widgets/ConnectionDialog.vala:381 msgid "Connection" msgstr "連線" #: src/Widgets/ConnectionDialog.vala:148 msgid "Select connection color" msgstr "鏿“‡é€£ç·šé¡è‰²" #: src/Widgets/ConnectionDialog.vala:171 msgid "Connection Name:" msgstr "連線å:" #: src/Widgets/ConnectionDialog.vala:172 msgid "Connection's name" msgstr "連線å稱" #: src/Widgets/ConnectionDialog.vala:179 msgid "Database Type:" msgstr "資料庫型別:" #: src/Widgets/ConnectionDialog.vala:201 msgid "Host:" msgstr "主機:" #: src/Widgets/ConnectionDialog.vala:207 msgid "Database Name:" msgstr "資料庫å:" #: src/Widgets/ConnectionDialog.vala:214 msgid "Username:" msgstr "使用者å稱:" #: src/Widgets/ConnectionDialog.vala:220 msgid "Password:" msgstr "密碼:" #: src/Widgets/ConnectionDialog.vala:224 src/Widgets/ConnectionDialog.vala:234 #: src/Widgets/ConnectionDialog.vala:301 src/Widgets/ConnectionDialog.vala:311 msgid "Show password" msgstr "顯示密碼" #: src/Widgets/ConnectionDialog.vala:231 src/Widgets/ConnectionDialog.vala:308 msgid "Hide password" msgstr "éš±è—密碼" #: src/Widgets/ConnectionDialog.vala:241 msgid "Port:" msgstr "埠:" #: src/Widgets/ConnectionDialog.vala:247 msgid "Use SSL:" msgstr "" #: src/Widgets/ConnectionDialog.vala:256 msgid "File Path:" msgstr "檔案路徑:" #: src/Widgets/ConnectionDialog.vala:257 msgid "Select Your SQLite File…" msgstr "鏿“‡æ‚¨çš„ SQLite 檔案…" #: src/Widgets/ConnectionDialog.vala:277 msgid "Connect via SSH Tunnel:" msgstr "é€éŽ SSH éš§é“連線:" #: src/Widgets/ConnectionDialog.vala:287 msgid "SSH Host:" msgstr "SSH 主機:" #: src/Widgets/ConnectionDialog.vala:292 msgid "SSH Username:" msgstr "SSH 使用者å稱:" #: src/Widgets/ConnectionDialog.vala:297 msgid "SSH Password:" msgstr "SSH 密碼:" #: src/Widgets/ConnectionDialog.vala:317 msgid "SSH Port:" msgstr "SSH 埠:" #: src/Widgets/ConnectionDialog.vala:318 msgid "Optional" msgstr "å¯é¸" #: src/Widgets/ConnectionDialog.vala:322 msgid "SSH Identity" msgstr "SSH 身份" #: src/Widgets/ConnectionDialog.vala:324 msgid "Select Your Identity File…" msgstr "鏿“‡æ‚¨çš„身份驗證檔案…" #: src/Widgets/ConnectionDialog.vala:332 #, fuzzy #| msgid "Missing SSH public key!" msgid "SSH Public Key" msgstr "缺少 SSH 公鑰ï¼" #: src/Widgets/ConnectionDialog.vala:334 #, fuzzy #| msgid "Select Your SQLite File…" msgid "Select Your Public Key File…" msgstr "鏿“‡æ‚¨çš„ SQLite 檔案…" #: src/Widgets/ConnectionDialog.vala:350 msgid "Generate SSH Key" msgstr "ç”Ÿæˆ SSH 金鑰" #: src/Widgets/ConnectionDialog.vala:382 msgid "SSH Tunnel" msgstr "SSH éš§é“" #: src/Widgets/ConnectionDialog.vala:462 msgid "Close" msgstr "關閉" #: src/Widgets/ConnectionDialog.vala:463 msgid "Save Connection" msgstr "儲存連線" #: src/Widgets/ConnectionDialog.vala:464 msgid "Test Connection" msgstr "測試連線" #: src/Widgets/ConnectionDialog.vala:672 msgid "Opening SSH Tunnel…" msgstr "正在開啟 SSH éš§é“…" #: src/Widgets/ConnectionDialog.vala:708 msgid "Testing Connection…" msgstr "正在測試連線…" #: src/Widgets/ConnectionDialog.vala:730 msgid "Successfully Connected!" msgstr "å·²æˆåŠŸé€£ç·šï¼" #: src/Widgets/ConnectionDialog.vala:739 msgid "Saving Connection…" msgstr "正在儲存連線…" #: src/Widgets/ConnectionDialog.vala:744 msgid "Connection Saved!" msgstr "連線已儲存ï¼" #: src/Widgets/ConnectionDialog.vala:752 msgid "Connecting…" msgstr "連線中…" #~ msgid "Light background" #~ msgstr "淺色背景" #~ msgid "Dark background" #~ msgstr "深色背景" ellie-commons-sequeler-9963fb4/src/000077500000000000000000000000001512323162700172415ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/src/Application.vala000066400000000000000000000115571512323162700223620ustar00rootroot00000000000000/* * Copyright (c) 2011-2018 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ namespace Sequeler { public Sequeler.Services.Settings settings; public Sequeler.Services.PasswordManager password_mngr; public Sequeler.Services.UpgradeManager upgrade_mngr; public Secret.Schema schema; } public class Sequeler.Application : Gtk.Application { public GLib.List windows; construct { application_id = Constants.PROJECT_NAME; flags |= ApplicationFlags.HANDLES_OPEN; GLib.Intl.setlocale (LocaleCategory.ALL, ""); GLib.Intl.bindtextdomain (Constants.GETTEXT_PACKAGE, Constants.LOCALEDIR); GLib.Intl.bind_textdomain_codeset (Constants.GETTEXT_PACKAGE, "UTF-8"); GLib.Intl.textdomain (Constants.GETTEXT_PACKAGE); schema = new Secret.Schema (Constants.PROJECT_NAME, Secret.SchemaFlags.NONE, "id", Secret.SchemaAttributeType.INTEGER, "schema", Secret.SchemaAttributeType.STRING); settings = new Sequeler.Services.Settings (); password_mngr = new Sequeler.Services.PasswordManager (); upgrade_mngr = new Sequeler.Services.UpgradeManager (); windows = new GLib.List (); } public void new_window () { new Sequeler.Window (this).present (); } public override void window_added (Gtk.Window window) { windows.append (window as Window); base.window_added (window); } protected override void open (File[] files, string hint) { foreach (var file in files) { var type = file.query_file_type (FileQueryInfoFlags.NONE); switch (type) { case FileType.DIRECTORY: // File handle represents a directory. critical (_("Directories are not supported")); continue; case FileType.UNKNOWN: // File's type is unknown case FileType.SPECIAL: // File is a "special" file, such as a socket, fifo, block device, or character device. case FileType.MOUNTABLE: // File is a mountable location. critical (_("Don't know what to do")); continue; case FileType.REGULAR: // File handle represents a regular file. case FileType.SYMBOLIC_LINK: // File handle represents a symbolic link (Unix systems). case FileType.SHORTCUT: // File is a shortcut (Windows systems). var window = this.add_new_window (); window.main.library.check_open_sqlite_file (file.get_uri (), file.get_basename ()); break; default: error (_("Something completely unexpected happened")); } } } public override void window_removed (Gtk.Window window) { windows.remove (window as Window); base.window_removed (window); } private Sequeler.Window add_new_window () { var window = new Sequeler.Window (this); this.add_window (window); return window; } private static bool granite_color_scheme_to_gtk_dark_theme (Binding binding, Value granite_prop, ref Value gtk_prop) { gtk_prop.set_boolean ((Granite.Settings.ColorScheme) granite_prop == Granite.Settings.ColorScheme.DARK); return true; } protected override void startup () { base.startup (); // Follow OS-wide dark preference unowned var granite_settings = Granite.Settings.get_default (); unowned var gtk_settings = Gtk.Settings.get_default (); granite_settings.bind_property ("prefers-color-scheme", gtk_settings, "gtk-application-prefer-dark-theme", BindingFlags.DEFAULT | BindingFlags.SYNC_CREATE, // FIXME: Using the lambda expression here causes Window not being freed when it's destroyed. // Maybe due to this issue in vala: https://gitlab.gnome.org/GNOME/vala/-/issues/957 (BindingTransformFunc) granite_color_scheme_to_gtk_dark_theme ); } protected override void activate () { this.add_new_window (); } } ellie-commons-sequeler-9963fb4/src/Layouts/000077500000000000000000000000001512323162700207015ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/src/Layouts/DataBaseSchema.vala000066400000000000000000000422671512323162700243460ustar00rootroot00000000000000/* * Copyright (c) 2017-2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Layouts.DataBaseSchema : Gtk.Grid { public weak Sequeler.Window window { get; construct; } public Gtk.ListStore schema_list; public Gtk.ComboBox schema_list_combo; public Gtk.TreeIter iter; private bool reloading { get; set; default = false;} public Gee.HashMap schemas; private ulong handler_id = 0; public Gtk.Stack stack; public Gtk.ScrolledWindow scroll; private Gda.DataModel? schema_table; public Granite.Widgets.SourceList.ExpandableItem tables_category; public Granite.Widgets.SourceList source_list; private Gtk.Grid toolbar; private Gtk.Spinner spinner; public Gtk.Revealer revealer; public Gtk.SearchEntry search; public string search_text; private Gtk.Grid main_grid; private Gtk.Revealer main_revealer; private Sequeler.Partials.DataBasePanel db_panel; enum Column { SCHEMAS } public DataBaseSchema (Sequeler.Window main_window) { Object ( orientation: Gtk.Orientation.VERTICAL, window: main_window, column_homogeneous: true ); } construct { var dropdown_area = new Gtk.Grid (); dropdown_area.column_homogeneous = false; dropdown_area.get_style_context ().add_class ("library-titlebar"); var cell = new Gtk.CellRendererText (); schema_list = new Gtk.ListStore (1, typeof (string)); schema_list_combo = new Gtk.ComboBox.with_model (schema_list); schema_list_combo.hexpand = true; schema_list_combo.pack_start (cell, false); schema_list_combo.set_attributes (cell, "text", Column.SCHEMAS); schema_list_combo.margin_top = schema_list_combo.margin_bottom = 9; schema_list_combo.margin_start = 9; reset_schema_combo.begin (); var search_btn = new Sequeler.Partials.HeaderBarButton ("system-search-symbolic", _("Search Tables")); search_btn.valign = Gtk.Align.CENTER; search_btn.clicked.connect (toggle_search_tables); dropdown_area.attach (schema_list_combo, 0, 0, 1, 1); dropdown_area.attach (search_btn, 1, 0, 1, 1); revealer = new Gtk.Revealer (); revealer.hexpand = true; revealer.reveal_child = false; search = new Gtk.SearchEntry (); search.placeholder_text = _("Search Tables\u2026"); search.hexpand = true; search.margin = 9; search.search_changed.connect (on_search_tables); search.key_press_event.connect (key => { if (key.keyval == 65307) { search.set_text (""); toggle_search_tables (); return true; } return false; }); revealer.add (search); scroll = new Gtk.ScrolledWindow (null, null); scroll.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.vexpand = true; toolbar = new Gtk.Grid (); toolbar.get_style_context ().add_class ("library-toolbar"); var reload_btn = new Sequeler.Partials.HeaderBarButton ("view-refresh-symbolic", _("Reload Tables")); reload_btn.clicked.connect (reload_schema); reload_btn.hexpand = true; reload_btn.halign = Gtk.Align.START; var add_table_btn = new Sequeler.Partials.HeaderBarButton ("list-add-symbolic", _("Add Table")); // add_table_btn.clicked.connect (add_table); add_table_btn.sensitive = false; spinner = new Gtk.Spinner (); spinner.hexpand = true; spinner.vexpand = true; spinner.halign = Gtk.Align.CENTER; spinner.valign = Gtk.Align.CENTER; toolbar.attach (add_table_btn, 0, 0, 1, 1); toolbar.attach (new Gtk.Separator (Gtk.Orientation.VERTICAL), 1, 0, 1, 1); toolbar.attach (reload_btn, 2, 0, 1, 1); stack = new Gtk.Stack (); stack.hexpand = true; stack.vexpand = true; stack.add_named (scroll, "list"); stack.add_named (spinner, "spinner"); main_grid = new Gtk.Grid (); main_grid.attach (dropdown_area, 0, 0, 1, 1); main_grid.attach (revealer, 0, 1, 1, 1); main_grid.attach (stack, 0, 2, 1, 2); main_grid.attach (toolbar, 0, 4, 1, 1); main_revealer = new Gtk.Revealer (); main_revealer.reveal_child = true; main_revealer.transition_type = Gtk.RevealerTransitionType.CROSSFADE; main_revealer.add (main_grid); db_panel = new Sequeler.Partials.DataBasePanel (window); var overlay = new Gtk.Overlay (); overlay.add_overlay (db_panel); overlay.add (main_revealer); add (overlay); } public void start_spinner () { spinner.start (); stack.visible_child_name = "spinner"; } public void stop_spinner () { spinner.stop (); stack.visible_child_name = "list"; } private async void reset_schema_combo () { if (handler_id > 0) { schema_list_combo.disconnect (handler_id); } schema_list.clear (); schema_list.append (out iter); schema_list.set (iter, Column.SCHEMAS, _("- Select Database -")); schema_list_combo.set_active (0); schema_list_combo.sensitive = false; handler_id = schema_list_combo.changed.connect (() => { if (schema_list_combo.get_active () == 0) { return; } start_spinner (); init_populate_schema.begin (null); }); } public async void init_populate_schema (Gda.DataModel? schema) { var database = window.data_manager.data["type"] == "SQLite" ? null : schemas[schema_list_combo.get_active ()]; yield populate_schema (database, schema); } public async void reload_schema () { if (reloading) { debug ("still loading"); return; } Gda.DataModel? schema = null; Gda.DataModelIter? _iter = null; reloading = true; schema = yield get_schema (); if (schema == null) { reloading = false; return; } yield reset_schema_combo (); if (window.data_manager.data["type"] == "SQLite") { yield init_populate_schema (schema); reloading = false; return; } _iter = schema.create_iter (); if (_iter == null) { debug ("not a valid iter"); return; } schemas = new Gee.HashMap (); int i = 1; while (_iter.move_next ()) { schema_list.append (out iter); schema_list.set (iter, Column.SCHEMAS, _iter.get_value_at (0).get_string ()); schemas.set (i, _iter.get_value_at (0).get_string ()); i++; } if (window.data_manager.data["type"] != "PostgreSQL") { schema_list_combo.sensitive = true; } if (window.data_manager.data["type"] == "PostgreSQL") { foreach (var entry in schemas.entries) { if ("public" == entry.value) { schema_list_combo.set_active (entry.key); } } reloading = false; return; } foreach (var entry in schemas.entries) { if (window.data_manager.data["name"] == entry.value) { schema_list_combo.set_active (entry.key); } } reloading = false; } public async Gda.DataModel? get_schema () { Gda.DataModel? result = null; var query = (window.main.connection_manager.db_type as DataBaseType).show_schema (); result = yield window.main.connection_manager.init_select_query (query); if (result == null) { reloading = false; yield reset_schema_combo (); } return result; } public async void populate_schema (string? database, Gda.DataModel? schema) { yield clear_views (); if (database != null && window.data_manager.data["name"] != database && window.data_manager.data["type"] != "PostgreSQL") { window.data_manager.data["name"] = database; yield update_connection (); return; } if (database == null && window.data_manager.data["type"] == "SQLite" && schema != null) { schema_table = schema; } else { yield get_schema_table (database); } if (schema_table == null) { stop_spinner (); return; } if (scroll.get_child () != null) { scroll.remove (scroll.get_child ()); } source_list = new Granite.Widgets.SourceList (); source_list.set_filter_func (source_list_visible_func, true); tables_category = new Granite.Widgets.SourceList.ExpandableItem (_("TABLES")); tables_category.expand_all (); Gda.DataModelIter _iter = schema_table.create_iter (); int top = 0; int count = 0; while (_iter.move_next ()) { var item = new Sequeler.Partials.DataBaseTable (_iter.get_value_at (0).get_string (), source_list); // Get the table rows coutn with an extra query for SQLite if (window.data_manager.data["type"] == "SQLite") { var table_count = yield get_table_count (item.name); Gda.DataModelIter count_iter = table_count.create_iter (); while (count_iter.move_next ()) { count = count_iter.get_value_at (0).get_int (); item.badge = count.to_string (); } } else { count = (int) _iter.get_value_at (1).get_long (); item.badge = count.to_string (); } var icon_name = count == 0 ? "table-empty" : "table"; item.icon = new GLib.ThemedIcon (icon_name); item.edited.connect ((new_name) => { if (new_name != item.name) { edit_table_name.begin (item.name, new_name); } }); tables_category.add (item); top++; } source_list.root.add (tables_category); scroll.add (source_list); source_list.item_selected.connect (item => { if (item == null) { return; } if (window.main.database_view.tabs.selected == 0) { window.main.database_view.structure.fill (item.name, database); } if (window.main.database_view.tabs.selected == 1) { window.main.database_view.content.fill (item.name, database, item.badge); } if (window.main.database_view.tabs.selected == 2) { window.main.database_view.relations.fill (item.name, database); } }); window.main.database_view.structure.database = database; window.main.database_view.content.database = database; window.main.database_view.relations.database = database; stop_spinner (); } public async void get_schema_table (string database) { var query = (window.main.connection_manager.db_type as DataBaseType).show_table_list (database); schema_table = yield window.main.connection_manager.init_select_query (query); } public async Gda.DataModel? get_table_count (string table) { var query = (window.main.connection_manager.db_type as DataBaseType).show_table_list (table); return yield window.main.connection_manager.init_select_query (query); } private async void update_connection () { if (window.data_manager.data["type"] == "PostgreSQL") { return; } schema_list_combo.sensitive = false; if (scroll.get_child () != null) { scroll.remove (scroll.get_child ()); } if (window.main.connection_manager.connection != null && window.main.connection_manager.connection.is_opened ()) { window.main.connection_manager.connection.clear_events_list (); window.main.connection_manager.connection.close (); } var result = new Gee.HashMap (); try { result = yield window.main.connection_manager.init_connection (); } catch (ThreadError e) { window.main.connection_manager.query_warning (e.message); } if (result["status"] == "true") { reload_schema.begin (); } else { window.main.connection_manager.query_warning (result["msg"]); } } private async void edit_table_name (string old_name, string new_name) { var query = (window.main.connection_manager.db_type as DataBaseType).edit_table_name (old_name, new_name); yield window.main.connection_manager.init_query (query); yield reload_schema (); } public void toggle_search_tables () { revealer.reveal_child = ! revealer.get_reveal_child (); if (revealer.get_reveal_child ()) { search.grab_focus_without_selecting (); } search.text = ""; } public void on_search_tables (Gtk.Entry searchentry) { search_text = searchentry.get_text ().down (); source_list.refilter (); tables_category.expand_all (); } private bool source_list_visible_func (Granite.Widgets.SourceList.Item item) { if (search_text == null || item is Granite.Widgets.SourceList.ExpandableItem) { return true; } return item.name.down ().contains (search_text); } private async void clear_views () { window.main.database_view.content.reset.begin (); window.main.database_view.relations.reset.begin (); window.main.database_view.structure.reset.begin (); } public void show_database_panel () { db_panel.new_database (); main_revealer.reveal_child = false; db_panel.reveal = true; } public void hide_database_panel () { main_revealer.reveal_child = true; db_panel.reveal = false; } public void edit_database_name () { db_panel.edit_database (schemas[schema_list_combo.get_active ()]); main_revealer.reveal_child = false; db_panel.reveal = true; } public async void create_database (string name) { var query = (window.main.connection_manager.db_type as DataBaseType).create_database (name); var result = yield window.main.connection_manager.init_query (query); if (result == null) { return; } yield reload_schema (); hide_database_panel (); } public async void edit_database (string name) { var current_db = schemas[schema_list_combo.get_active ()]; // Renaming a database is tricky as we can't simply update its name. // We need to first create a new database with the chosen name. var query = (window.main.connection_manager.db_type as DataBaseType).create_database (name); var result = yield window.main.connection_manager.init_query (query); if (result == null) { return; } // Then, we need to loop through all the tables and attach them to the new database. if (tables_category.n_children > 0) { foreach (Granite.Widgets.SourceList.Item child in tables_category.children) { var tb_result = yield window.main.connection_manager.init_query ( (window.main.connection_manager.db_type as DataBaseType).transfer_table ( current_db, child.name, name ) ); if (tb_result == null) { return; } } } // Delete the old database. yield window.main.connection_manager.init_query ( (window.main.connection_manager.db_type as DataBaseType).delete_database (current_db) ); // Update the DataManager to use the newly created database. window.data_manager.data["name"] = name; yield update_connection (); hide_database_panel (); } public async void delete_database () { yield window.main.connection_manager.init_query ( (window.main.connection_manager.db_type as DataBaseType).delete_database ( schemas[schema_list_combo.get_active ()] ) ); yield reload_schema (); schema_list_combo.active = 0; } } ellie-commons-sequeler-9963fb4/src/Layouts/DataBaseView.vala000066400000000000000000000265521512323162700240570ustar00rootroot00000000000000/* * Copyright (c) 2011-2018 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Layouts.DataBaseView : Gtk.Grid { public weak Sequeler.Window window { get; construct; } public Granite.Widgets.ModeButton tabs; public Gtk.Stack stack; public Sequeler.Layouts.Views.Structure structure; public Sequeler.Layouts.Views.Content content; public Sequeler.Layouts.Views.Relations relations; public Granite.Widgets.DynamicNotebook query; private Sequeler.Layouts.Views.Query tab_to_restore; public Gtk.MenuButton font_style; public DataBaseView (Sequeler.Window main_window) { Object ( orientation: Gtk.Orientation.VERTICAL, window: main_window, column_homogeneous: true ); } construct { var toolbar = new Gtk.Grid (); toolbar.get_style_context ().add_class ("library-titlebar"); tabs = new Granite.Widgets.ModeButton (); tabs.append (new Sequeler.Partials.ToolBarButton ("x-office-spreadsheet-template", "Structure", _("Structure"))); tabs.append (new Sequeler.Partials.ToolBarButton ("x-office-document", "Content", _("Content"))); tabs.append (new Sequeler.Partials.ToolBarButton ("preferences-system-windows", "Relations", _("Relations"))); tabs.append (new Sequeler.Partials.ToolBarButton ("accessories-text-editor", "Query", _("Query"))); tabs.set_active (0); tabs.margin = 9; tabs.mode_changed.connect ((tab) => { stack.set_visible_child_name (tab.name); if (tab.name == "Query") { font_style.visible = true; font_style.no_show_all = false; } else { font_style.visible = false; font_style.no_show_all = true; } if (window.main.database_schema.source_list == null) { return; } var item_selected = window.main.database_schema.source_list.selected; if (item_selected == null) { return; } if (tab.name == "Structure") { window.main.database_view.structure.fill (item_selected.name, window.main.database_view.structure.database); } if (tab.name == "Content") { window.main.database_view.content.fill (item_selected.name, window.main.database_view.content.database, item_selected.badge); } if (tab.name == "Relations") { window.main.database_view.relations.fill (item_selected.name, window.main.database_view.relations.database); } }); toolbar.attach (tabs, 0, 0, 1, 1); var view_options = new Gtk.Grid (); view_options.hexpand = true; view_options.halign = Gtk.Align.END; view_options.valign = Gtk.Align.CENTER; // Query View buttons var zoom_out_button = new Gtk.Button.from_icon_name ("zoom-out-symbolic", Gtk.IconSize.MENU); zoom_out_button.action_name = Sequeler.Services.ActionManager.ACTION_PREFIX + Sequeler.Services.ActionManager.ACTION_ZOOM_OUT; zoom_out_button.tooltip_markup = Granite.markup_accel_tooltip ({"minus"}, _("Zoom Out")); var zoom_default_button = new Gtk.Button.with_label ( "%.0f%%".printf (window.action_manager.get_current_font_size () * 10) ); zoom_default_button.action_name = Sequeler.Services.ActionManager.ACTION_PREFIX + Sequeler.Services.ActionManager.ACTION_ZOOM_DEFAULT; zoom_default_button.tooltip_markup = Granite.markup_accel_tooltip ({"0"}, _("Zoom 1:1")); var zoom_in_button = new Gtk.Button.from_icon_name ("zoom-in-symbolic", Gtk.IconSize.MENU); zoom_in_button.action_name = Sequeler.Services.ActionManager.ACTION_PREFIX + Sequeler.Services.ActionManager.ACTION_ZOOM_IN; zoom_in_button.tooltip_markup = Granite.markup_accel_tooltip ({"plus"}, _("Zoom In")); var font_size_grid = new Gtk.Grid (); font_size_grid.column_homogeneous = true; font_size_grid.hexpand = true; font_size_grid.margin = 12; font_size_grid.get_style_context ().add_class (Gtk.STYLE_CLASS_LINKED); font_size_grid.add (zoom_out_button); font_size_grid.add (zoom_default_button); font_size_grid.add (zoom_in_button); var color_button_white = new Gtk.RadioButton (null); color_button_white.halign = Gtk.Align.CENTER; color_button_white.tooltip_text = _("High Contrast"); var color_button_white_context = color_button_white.get_style_context (); color_button_white_context.add_class ("color-button"); color_button_white_context.add_class ("color-white"); var color_button_light = new Gtk.RadioButton.from_widget (color_button_white); color_button_light.halign = Gtk.Align.CENTER; color_button_light.tooltip_text = _("Solarized Light"); var color_button_light_context = color_button_light.get_style_context (); color_button_light_context.add_class ("color-button"); color_button_light_context.add_class ("color-light"); var color_button_dark = new Gtk.RadioButton.from_widget (color_button_white); color_button_dark.halign = Gtk.Align.CENTER; color_button_dark.tooltip_text = _("Solarized Dark"); var color_button_dark_context = color_button_dark.get_style_context (); color_button_dark_context.add_class ("color-button"); color_button_dark_context.add_class ("color-dark"); var menu_grid = new Gtk.Grid (); menu_grid.margin_bottom = 12; menu_grid.orientation = Gtk.Orientation.VERTICAL; menu_grid.width_request = 200; menu_grid.attach (font_size_grid, 0, 0, 3, 1); menu_grid.attach (color_button_white, 0, 1, 1, 1); menu_grid.attach (color_button_light, 1, 1, 1, 1); menu_grid.attach (color_button_dark, 2, 1, 1, 1); menu_grid.show_all (); var menu = new Gtk.Popover (null); menu.add (menu_grid); font_style = new Gtk.MenuButton (); font_style.margin_end = 9; font_style.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT); font_style.set_image (new Gtk.Image.from_icon_name ("font-select-symbolic", Gtk.IconSize.LARGE_TOOLBAR)); font_style.tooltip_text = _("Change Text Style"); font_style.popover = menu; font_style.can_focus = false; font_style.visible = false; font_style.no_show_all = true; view_options.add (font_style); toolbar.attach (view_options, 1, 0, 1, 1); stack = new Gtk.Stack (); structure = new Sequeler.Layouts.Views.Structure (window); content = new Sequeler.Layouts.Views.Content (window); relations = new Sequeler.Layouts.Views.Relations (window); query = get_query_notebook (); stack.add_named (structure, "Structure"); stack.add_named (content, "Content"); stack.add_named (relations, "Relations"); stack.add_named (query, "Query"); stack.expand = true; attach (toolbar, 0, 0, 1, 1); attach (stack, 0, 1, 1, 1); settings.changed.connect (() => { zoom_default_button.label = "%.0f%%".printf (window.action_manager.get_current_font_size () * 10); }); switch (Sequeler.settings.style_scheme) { case "high-contrast": color_button_white.active = true; break; case "solarized-light": color_button_light.active = true; break; case "solarized-dark": color_button_dark.active = true; break; } color_button_dark.clicked.connect (() => { Sequeler.settings.style_scheme = "solarized-dark"; (query.current.page as Layouts.Views.Query).update_color_style (); }); color_button_light.clicked.connect (() => { Sequeler.settings.style_scheme = "solarized-light"; (query.current.page as Layouts.Views.Query).update_color_style (); }); color_button_white.clicked.connect (() => { Sequeler.settings.style_scheme = "classic"; (query.current.page as Layouts.Views.Query).update_color_style (); }); } private Granite.Widgets.DynamicNotebook get_query_notebook () { var notebook = new Granite.Widgets.DynamicNotebook (); notebook.add_button_tooltip = _("Create a new Query Tab"); notebook.expand = true; notebook.allow_restoring = true; notebook.max_restorable_tabs = 1; var first_page = new Sequeler.Layouts.Views.Query (window); var first_tab = new Granite.Widgets.Tab ( _("Query"), null, first_page ); first_page.update_tab_indicator.connect ((status) => { var icon = status ? new ThemedIcon ("process-completed") : new ThemedIcon ("process-stop"); first_tab.icon = icon; }); notebook.insert_tab (first_tab, 0); notebook.new_tab_requested.connect (() => { var new_page = new Sequeler.Layouts.Views.Query (window); var new_tab = new Granite.Widgets.Tab ( _("Query %i").printf (notebook.n_tabs), null, new_page ); new_page.update_tab_indicator.connect ((status) => { var icon = status ? new ThemedIcon ("process-completed") : new ThemedIcon ("process-stop"); new_tab.icon = icon; }); notebook.insert_tab (new_tab, notebook.n_tabs - 1); }); notebook.close_tab_requested.connect ((tab) => { if (notebook.n_tabs == 1) { var new_page = new Sequeler.Layouts.Views.Query (window); var new_tab = new Granite.Widgets.Tab ( _("Query"), null, new_page ); notebook.insert_tab (new_tab, notebook.n_tabs - 1); } tab_to_restore = tab.page as Sequeler.Layouts.Views.Query; tab.restore_data = tab.label; return true; }); notebook.tab_restored.connect ((label, data, icon) => { var tab = new Granite.Widgets.Tab (label, icon, tab_to_restore); tab_to_restore.update_tab_indicator.connect ((status) => { var update_icon = status ? new ThemedIcon ("process-completed") : new ThemedIcon ("process-stop"); tab.icon = update_icon; }); notebook.insert_tab (tab, notebook.n_tabs - 1); }); return notebook; } } ellie-commons-sequeler-9963fb4/src/Layouts/HeaderBar.vala000066400000000000000000000147441512323162700233750ustar00rootroot00000000000000/* * Copyright (c) 2017-2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Layouts.HeaderBar : Gtk.HeaderBar { public weak Sequeler.Window window { get; construct; } private Gtk.Button logout_button; private Gtk.Button new_db_button; private Gtk.Button delete_db_button; private Gtk.Button edit_db_button; private Gtk.Popover menu_popover; public bool logged_out { get; set; } public HeaderBar (Sequeler.Window main_window) { Object ( window: main_window, logged_out: true ); set_title (APP_NAME); set_show_close_button (true); build_ui (); toggle_logout.begin (); } private void build_ui () { logout_button = header_button ("application-logout"); logout_button.action_name = Sequeler.Services.ActionManager.ACTION_PREFIX + Sequeler.Services.ActionManager.ACTION_LOGOUT; logout_button.tooltip_markup = Granite.markup_accel_tooltip ({"Escape"}, _("Logout")); new_db_button = header_button ("office-database-new"); new_db_button.tooltip_markup = Granite.markup_accel_tooltip ( {"N"}, _("Create a new database") ); new_db_button.action_name = Sequeler.Services.ActionManager.ACTION_PREFIX + Sequeler.Services.ActionManager.ACTION_NEW_DB; delete_db_button = header_button ("office-database-remove"); delete_db_button.tooltip_markup = Granite.markup_accel_tooltip ( {"D"}, _("Delete database") ); delete_db_button.action_name = Sequeler.Services.ActionManager.ACTION_PREFIX + Sequeler.Services.ActionManager.ACTION_DELETE_DB; edit_db_button = header_button ("office-database-edit"); edit_db_button.tooltip_markup = Granite.markup_accel_tooltip ( {"P"}, _("Database properties") ); edit_db_button.action_name = Sequeler.Services.ActionManager.ACTION_PREFIX + Sequeler.Services.ActionManager.ACTION_EDIT_DB; new_db_button.visible = false; new_db_button.no_show_all = true; edit_db_button.visible = false; edit_db_button.no_show_all = true; delete_db_button.visible = false; delete_db_button.no_show_all = true; var new_window_item = new_menuitem (_("New Window"), "n"); new_window_item.action_name = Sequeler.Services.ActionManager.ACTION_PREFIX + Sequeler.Services.ActionManager.ACTION_NEW_WINDOW; var new_connection_item = new_menuitem (_("New Connection"), "n"); new_connection_item.action_name = Sequeler.Services.ActionManager.ACTION_PREFIX + Sequeler.Services.ActionManager.ACTION_NEW_CONNECTION; var quit_item = new_menuitem (_("Quit"), "q"); quit_item.action_name = Sequeler.Services.ActionManager.ACTION_PREFIX + Sequeler.Services.ActionManager.ACTION_QUIT; var menu_separator = new Gtk.Separator (Gtk.Orientation.HORIZONTAL); menu_separator.margin_top = 6; menu_separator.margin_bottom = 6; var menu_grid = new Gtk.Grid (); menu_grid.expand = true; menu_grid.margin_top = menu_grid.margin_bottom = 6; menu_grid.orientation = Gtk.Orientation.VERTICAL; menu_grid.attach (new_window_item, 0, 1, 1, 1); menu_grid.attach (new_connection_item, 0, 2, 1, 1); menu_grid.attach (menu_separator, 0, 3, 1, 1); menu_grid.attach (quit_item, 0, 4, 1, 1); menu_grid.show_all (); var open_menu = new Gtk.MenuButton (); open_menu.set_image (new Gtk.Image.from_icon_name ("open-menu", Gtk.IconSize.LARGE_TOOLBAR)); open_menu.tooltip_text = _("Menu"); menu_popover = new Gtk.Popover (open_menu); menu_popover.add (menu_grid); open_menu.popover = menu_popover; open_menu.valign = Gtk.Align.CENTER; pack_start (logout_button); pack_start (headerbar_separator ()); pack_start (new_db_button); pack_start (edit_db_button); pack_start (headerbar_separator ()); pack_start (delete_db_button); pack_end (open_menu); } private Gtk.ModelButton new_menuitem (string label, string accels) { var button = new Gtk.ModelButton (); button.get_child ().destroy (); button.add (new Granite.AccelLabel (label, accels)); return button; } private Gtk.Button header_button (string image) { var button = new Gtk.Button.from_icon_name (image, Gtk.IconSize.LARGE_TOOLBAR); button.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT); button.valign = Gtk.Align.CENTER; button.can_focus = false; return button; } private Gtk.Separator headerbar_separator () { var separator = new Gtk.Separator (Gtk.Orientation.VERTICAL); separator.get_style_context ().add_class ("headerbar-separator"); return separator; } public async void toggle_logout () { logged_out = !logged_out; logout_button.visible = logged_out; logout_button.no_show_all = !logged_out; if ( window.data_manager != null && ( window.data_manager.data["type"] == "MySQL" || window.data_manager.data["type"] == "MariaDB" ) ) { new_db_button.visible = logged_out; new_db_button.no_show_all = !logged_out; edit_db_button.visible = logged_out; edit_db_button.no_show_all = !logged_out; delete_db_button.visible = logged_out; delete_db_button.no_show_all = !logged_out; } } } ellie-commons-sequeler-9963fb4/src/Layouts/Library.vala000066400000000000000000000447221512323162700231630ustar00rootroot00000000000000/* * Copyright (c) 2017-2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Layouts.Library : Gtk.Grid { public weak Sequeler.Window window { get; construct; } GLib.File? file; Gtk.TextBuffer buffer; private Gtk.Grid title; private Gtk.Revealer motion_revealer; public Gtk.ListBox item_box; public Gtk.ScrolledWindow scroll; public Sequeler.Partials.HeaderBarButton delete_all; public Gee.HashMap real_data; public Gtk.Spinner real_spinner; public Gtk.ModelButton real_button; public Sequeler.Services.ConnectionManager connection_manager; public signal void edit_dialog (Gee.HashMap data); // Datatype restrictions on DnD (Gtk.TargetFlags). public const Gtk.TargetEntry[] TARGET_ENTRIES_LABEL = { { "LIBRARYITEM", Gtk.TargetFlags.SAME_APP, 0 } }; public Library (Sequeler.Window main_window) { Object ( orientation: Gtk.Orientation.VERTICAL, window: main_window, width_request: 260, column_homogeneous: true ); } construct { var motion_grid = new Gtk.Grid (); motion_grid.margin = 6; motion_grid.get_style_context ().add_class ("grid-motion"); motion_grid.height_request = 18; motion_revealer = new Gtk.Revealer (); motion_revealer.transition_type = Gtk.RevealerTransitionType.SLIDE_DOWN; motion_revealer.add (motion_grid); var titlebar = new Sequeler.Partials.TitleBar (_("SAVED CONNECTIONS")); title = new Gtk.Grid (); title.attach (titlebar, 0, 0); title.attach (motion_revealer, 0, 1); var toolbar = new Gtk.Grid (); toolbar.get_style_context ().add_class ("library-toolbar"); delete_all = new Sequeler.Partials.HeaderBarButton ("user-trash-symbolic", _("Delete All")); delete_all.halign = Gtk.Align.END; delete_all.hexpand = true; delete_all.clicked.connect (() => { confirm_delete_all (); }); var reload_btn = new Sequeler.Partials.HeaderBarButton ("view-refresh-symbolic", _("Reload Library")); reload_btn.clicked.connect (() => reload_library.begin ()); var export_btn = new Sequeler.Partials.HeaderBarButton ("document-save-symbolic", _("Export Library")); export_btn.clicked.connect (export_library); toolbar.attach (reload_btn, 0, 0, 1, 1); toolbar.attach (new Gtk.Separator (Gtk.Orientation.VERTICAL), 1, 0, 1, 1); toolbar.attach (export_btn, 2, 0, 1, 1); toolbar.attach (new Gtk.Separator (Gtk.Orientation.VERTICAL), 3, 0, 1, 1); toolbar.attach (delete_all, 4, 0, 1, 1); scroll = new Gtk.ScrolledWindow (null, null); scroll.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC; item_box = new Gtk.ListBox (); item_box.get_style_context ().add_class ("library-box"); item_box.set_activate_on_single_click (false); item_box.selection_mode = Gtk.SelectionMode.SINGLE; item_box.valign = Gtk.Align.FILL; item_box.expand = true; scroll.add (item_box); foreach (var conn in settings.saved_connections) { add_item (settings.arraify_data (conn)); } if (settings.saved_connections.length > 0) { delete_all.sensitive = true; } item_box.row_activated.connect ((row) => { var item = row as Sequeler.Partials.LibraryItem; item.spinner.start (); item.connect_button.sensitive = false; window.data_manager.data = item.data; init_connection_begin (item.data, item.spinner, item.connect_button, false); }); attach (title, 0, 0, 1, 1); scroll.expand = true; attach (scroll, 0, 1, 1, 2); attach (toolbar, 0, 3, 1, 1); build_drag_and_drop (); } private void build_drag_and_drop () { Gtk.drag_dest_set (item_box, Gtk.DestDefaults.ALL, TARGET_ENTRIES_LABEL, Gdk.DragAction.MOVE); item_box.drag_data_received.connect (on_drag_data_received); Gtk.drag_dest_set (title, Gtk.DestDefaults.ALL, TARGET_ENTRIES_LABEL, Gdk.DragAction.MOVE); title.drag_data_received.connect (on_drag_item_received); title.drag_motion.connect (on_drag_motion); title.drag_leave.connect (on_drag_leave); } private void on_drag_data_received (Gdk.DragContext context, int x, int y, Gtk.SelectionData selection_data, uint target_type, uint time) { int new_pos; var target = (Partials.LibraryItem) item_box.get_row_at_y (y); var row = ((Gtk.Widget[]) selection_data.get_data ())[0]; var source = (Partials.LibraryItem) row; int last_index = (int) item_box.get_children ().length (); if (target == null) { new_pos = last_index - 1; } else { new_pos = source.get_index () < target.get_index () ? target.get_index () : target.get_index () + 1; } settings.reorder_connection (source.data, new_pos); reload_library.begin (); } private void on_drag_item_received (Gdk.DragContext context, int x, int y, Gtk.SelectionData selection_data, uint target_type, uint time) { var row = ((Gtk.Widget[]) selection_data.get_data ())[0]; var source = (Partials.LibraryItem) row; settings.reorder_connection (source.data, 0); reload_library.begin (); } public bool on_drag_motion (Gdk.DragContext context, int x, int y, uint time) { motion_revealer.reveal_child = true; return true; } public void on_drag_leave (Gdk.DragContext context, uint time) { motion_revealer.reveal_child = false; } public void add_item (Gee.HashMap data) { var item = new Sequeler.Partials.LibraryItem (data); item.scrolled = scroll; item_box.add (item); item.confirm_delete.connect ((item, data) => { confirm_delete (item, data); }); item.edit_dialog.connect ((data) => { window.data_manager.data = data; if (window.connection_dialog == null) { window.connection_dialog = new Sequeler.Widgets.ConnectionDialog (window); window.connection_dialog.show_all (); window.connection_dialog.destroy.connect (() => { window.connection_dialog = null; }); } window.connection_dialog.present (); }); item.duplicate_connection.connect ((data) => { duplicate_connection.begin (data); }); item.connect_to.connect ((data, spinner, connect_button) => { window.data_manager.data = data; init_connection_begin (data, spinner, connect_button); }); } public void confirm_delete (Gtk.ListBoxRow item, Gee.HashMap data) { var message_dialog = new Granite.MessageDialog.with_image_from_icon_name (_("Are you sure you want to proceed?"), _("By deleting this connection you won’t be able to recover this data."), "dialog-warning", Gtk.ButtonsType.CANCEL); message_dialog.transient_for = window; var suggested_button = new Gtk.Button.with_label (_("Yes, Delete!")); suggested_button.get_style_context ().add_class (Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION); message_dialog.add_action_widget (suggested_button, Gtk.ResponseType.ACCEPT); message_dialog.show_all (); if (message_dialog.run () == Gtk.ResponseType.ACCEPT) { settings.delete_connection (data); item_box.remove (item); reload_library.begin (); } message_dialog.destroy (); } public void confirm_delete_all () { var message_dialog = new Granite.MessageDialog.with_image_from_icon_name (_("Are you sure you want to proceed?"), _("All the data will be deleted and you won’t be able to recover it."), "dialog-warning", Gtk.ButtonsType.CANCEL); message_dialog.transient_for = window; var suggested_button = new Gtk.Button.with_label (_("Yes, Delete All!")); suggested_button.get_style_context ().add_class (Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION); message_dialog.add_action_widget (suggested_button, Gtk.ResponseType.ACCEPT); message_dialog.show_all (); if (message_dialog.run () == Gtk.ResponseType.ACCEPT) { settings.clear_connections (); item_box.forall ((item) => item_box.remove (item)); reload_library.begin (); } message_dialog.destroy (); } public async void reload_library () { item_box.@foreach ((item) => item_box.remove (item)); foreach (var new_conn in settings.saved_connections) { var array = settings.arraify_data (new_conn); add_item (array); } item_box.show_all (); delete_all.sensitive = (settings.saved_connections.length > 0); } public async void check_add_item (Gee.HashMap data) { bool result = false; SourceFunc callback = check_add_item.callback; new Thread ("check-add-item", () => { result = update_existing_connection (data); Idle.add ((owned) callback); Thread.exit (null); return null; }); yield; if (!result) { settings.add_connection (data); } yield reload_library (); } private bool update_existing_connection (Gee.HashMap data) { foreach (var conn in settings.saved_connections) { var check = settings.arraify_data (conn); if (check["id"] == data["id"]) { settings.edit_connection (data, conn); return true; } } return false; } public void check_open_sqlite_file (string path, string name) { foreach (var conn in settings.saved_connections) { var check = settings.arraify_data (conn); if (check["file_path"] == path) { settings.edit_connection (check, conn); reload_library.begin ((obj, res) => { item_box.get_row_at_index (0).activate (); }); return; } } var data = new Gee.HashMap (); data.set ("id", settings.tot_connections.to_string ()); data.set ("title", name); data.set ("color", "rgb(222,222,222)"); data.set ("type", "SQLite"); data.set ("host", ""); data.set ("name", ""); data.set ("file_path", path); data.set ("username", ""); data.set ("password", ""); data.set ("port", ""); settings.add_connection (data); reload_library.begin ((obj, res) => { item_box.get_row_at_index (0).activate (); }); } private void init_connection_begin (Gee.HashMap data, Gtk.Spinner spinner, Gtk.ModelButton button, bool update = true) { connection_manager = new Sequeler.Services.ConnectionManager (window, data); if (data["type"] != "SQLite" && data["username"] == "") { spinner.stop (); button.sensitive = true; connection_warning (_("A username is required in order to connect!"), data["name"]); return; } if (data["has_ssh"] == "true") { real_data = data; real_spinner = spinner; real_button = button; connection_manager.ssh_tunnel_ready.connect (() => init_real_connection_begin (real_data, real_spinner, real_button, update) ); new Thread (null, () => { var result = new Gee.HashMap (); try { connection_manager.ssh_tunnel_init (true); } catch (Error e) { result["status"] = "false"; result["message"] = e.message; } Idle.add (() => { if (result["status"] == "false") { spinner.stop (); button.sensitive = true; connection_warning (result["message"], data["name"]); } return false; }); return null; }); } else { init_real_connection_begin (data, spinner, button, update); } } private void init_real_connection_begin (Gee.HashMap data, Gtk.Spinner spinner, Gtk.ModelButton button, bool update) { var result = new Gee.HashMap (); connection_manager.init_connection.begin ((obj, res) => { new Thread (null, () => { try { result = connection_manager.init_connection.end (res); } catch (ThreadError e) { connection_warning (e.message, data["name"]); spinner.stop (); button.sensitive = true; } Idle.add (() => { spinner.stop (); button.sensitive = true; if (result["status"] == "true") { if (settings.save_quick && update) { check_add_item.begin (data); } window.main.connection_opened.begin (connection_manager); } else { connection_warning (result["msg"], data["name"]); } return false; }); return null; }); }); } private void export_library () { file = null; buffer = new Gtk.TextBuffer (null); var save_dialog = new Gtk.FileChooserNative (_("Pick a file"), window, Gtk.FileChooserAction.SAVE, _("_Save"), _("_Cancel")); save_dialog.do_overwrite_confirmation = true; save_dialog.modal = true; save_dialog.response.connect ((dialog, response_id) => { switch (response_id) { case Gtk.ResponseType.ACCEPT: file = save_dialog.get_file (); save_to_file.begin (); break; default: break; } dialog.destroy (); }); save_dialog.run (); } private async void save_to_file () { var buffer_content = ""; var library = settings.saved_connections; foreach (var lib in library) { var array = settings.arraify_data (lib); try { array["password"] = yield password_mngr.get_password_async (array["id"]); } catch (Error e) { debug ("Unable to get the password from libsecret"); } if (array["has_ssh"] == "true") { try { array["ssh_password"] = yield password_mngr.get_password_async (array["id"] + "9999"); } catch { debug ("Unable to get the SSH password from libsecret"); } } buffer_content += settings.stringify_data (array) + "---\n"; } buffer.set_text (buffer_content); Gtk.TextIter start; Gtk.TextIter end; buffer.get_bounds (out start, out end); string current_contents = buffer.get_text (start, end, false); try { file.replace_contents (current_contents.data, null, false, GLib.FileCreateFlags.NONE, null, null); } catch (GLib.Error err) { export_warning (err.message); } } private void connection_warning (string message, string title) { var message_dialog = new Granite.MessageDialog.with_image_from_icon_name (_("Unable to Connect to %s").printf (title), message, "dialog-error", Gtk.ButtonsType.NONE); message_dialog.transient_for = window; var suggested_button = new Gtk.Button.with_label ("Close"); message_dialog.add_action_widget (suggested_button, Gtk.ResponseType.ACCEPT); message_dialog.show_all (); if (message_dialog.run () == Gtk.ResponseType.ACCEPT) {} message_dialog.destroy (); } private void export_warning (string message) { var message_dialog = new Granite.MessageDialog.with_image_from_icon_name (_("Unable to Export Library "), message, "dialog-error", Gtk.ButtonsType.NONE); message_dialog.transient_for = window; var suggested_button = new Gtk.Button.with_label ("Close"); message_dialog.add_action_widget (suggested_button, Gtk.ResponseType.ACCEPT); message_dialog.show_all (); if (message_dialog.run () == Gtk.ResponseType.ACCEPT) {} message_dialog.destroy (); } private async void duplicate_connection (Gee.HashMap data) { if (data["type"] != "SQLite") { try { data["password"] = yield password_mngr.get_password_async (data["id"]); } catch (Error e) { debug ("Unable to get the password from libsecret"); } } if (data["has_ssh"] == "true") { try { data["ssh_password"] = yield password_mngr.get_password_async (data["id"] + "9999"); } catch { debug ("Unable to get the SSH password from libsecret"); } } yield settings.duplicate_connection (data); yield reload_library (); } } ellie-commons-sequeler-9963fb4/src/Layouts/Main.vala000066400000000000000000000074301512323162700224360ustar00rootroot00000000000000/* * Copyright (c) 2011-2018 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Layouts.Main : Gtk.Paned { public weak Sequeler.Window window { get; construct; } public Sequeler.Services.ConnectionManager? connection_manager { get; set; default = null; } public Sequeler.Layouts.Library library; public Sequeler.Layouts.DataBaseSchema database_schema; public Sequeler.Layouts.Welcome welcome; public Sequeler.Layouts.DataBaseView database_view; public Gtk.Stack sidebar_stack; public Gtk.Stack main_stack; public Main (Sequeler.Window main_window) { Object ( orientation: Gtk.Orientation.HORIZONTAL, window: main_window ); } construct { position = settings.sidebar_width; sidebar_stack = new Gtk.Stack (); library = new Sequeler.Layouts.Library (window); database_schema = new Sequeler.Layouts.DataBaseSchema (window); sidebar_stack.add_named (library, "library"); sidebar_stack.add_named (database_schema, "database_schema"); main_stack = new Gtk.Stack (); welcome = new Sequeler.Layouts.Welcome (window); database_view = new Sequeler.Layouts.DataBaseView (window); main_stack.add_named (welcome, "welcome"); main_stack.add_named (database_view, "database_view"); build_sidebar (); build_main (); } public void build_sidebar () { pack1 (sidebar_stack, false, false); } public void build_main () { pack2 (main_stack, true, false); } public async void connection_opened (Sequeler.Services.ConnectionManager? cnn_manager) { debug ("connection opened"); connection_manager = cnn_manager; var host = cnn_manager.data["host"] != "" ? cnn_manager.data["host"] : "127.0.0.1"; window.headerbar.toggle_logout.begin (); sidebar_stack.set_visible_child_full ("database_schema", Gtk.StackTransitionType.CROSSFADE); main_stack.set_visible_child_full ("database_view", Gtk.StackTransitionType.SLIDE_LEFT); window.headerbar.title = _("Connected to %s").printf (cnn_manager.data["title"]); window.headerbar.subtitle = cnn_manager.data["username"] + "@" + host; database_schema.reload_schema.begin (); } public void connection_closed () { if (connection_manager.data["has_ssh"] == "true") { debug ("connection manager %p", connection_manager); connection_manager.ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); } if (connection_manager.connection != null && connection_manager.connection.is_opened ()) { connection_manager.connection.clear_events_list (); connection_manager.connection.close (); connection_manager.connection = null; } connection_manager = null; sidebar_stack.set_visible_child_full ("library", Gtk.StackTransitionType.CROSSFADE); main_stack.set_visible_child_full ("welcome", Gtk.StackTransitionType.UNDER_RIGHT); } } ellie-commons-sequeler-9963fb4/src/Layouts/Views/000077500000000000000000000000001512323162700217765ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/src/Layouts/Views/Content.vala000066400000000000000000000234631512323162700242650ustar00rootroot00000000000000/* * Copyright (c) 2017-2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Layouts.Views.Content : Gtk.Grid { public weak Sequeler.Window window { get; construct; } public Gtk.Stack stack; private Gda.DataModel? table_content; public Gtk.Grid scroll_grid; public Gtk.ScrolledWindow scroll; public Gtk.Label result_message; private Gtk.Spinner spinner; private Gtk.Button pages_button; private Gtk.SpinButton pages_entry; private Sequeler.Partials.HeaderBarButton page_prev_btn; private Sequeler.Partials.HeaderBarButton page_next_btn; private int tot_pages { get; set; default = 0; } private int current_page { get; set; default = 1; } private bool reloading { get; set; default = false; } private string _table_name = ""; public string table_name { get { return _table_name; } set { _table_name = value; } } private string _database = ""; public string database { get { return _database; } set { _database = value; } } public int table_count = 0; private string? sortby = null; private string sort = "ASC"; public Content (Sequeler.Window main_window) { Object ( orientation: Gtk.Orientation.VERTICAL, window: main_window ); } construct { scroll_grid = new Gtk.Grid (); scroll_grid.expand = true; scroll = new Gtk.ScrolledWindow (null, null); scroll.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.expand = true; scroll_grid.add (scroll); var info_bar = new Gtk.Grid (); info_bar.get_style_context ().add_class ("library-toolbar"); info_bar.attach (build_pagination (), 0, 0, 1, 1); info_bar.attach (new Gtk.Separator (Gtk.Orientation.VERTICAL), 1, 0, 1, 1); info_bar.attach (build_results_msg (), 2, 0, 1, 1); info_bar.attach (build_reload_btn (), 3, 0, 1, 1); spinner = new Gtk.Spinner (); spinner.hexpand = true; spinner.vexpand = true; spinner.halign = Gtk.Align.CENTER; spinner.valign = Gtk.Align.CENTER; var welcome = new Granite.Widgets.Welcome (_("Select Table"), _("Select a table from the left sidebar to activate this view.")); stack = new Gtk.Stack (); stack.hexpand = true; stack.vexpand = true; stack.add_named (welcome, "welcome"); stack.add_named (spinner, "spinner"); stack.add_named (scroll_grid, "list"); attach (stack, 0, 0, 1, 1); attach (info_bar, 0, 1, 1, 1); placeholder (); } public void placeholder () { stack.visible_child_name = "welcome"; } public void start_spinner () { spinner.start (); stack.visible_child_name = "spinner"; } public void stop_spinner () { spinner.stop (); stack.visible_child_name = "list"; } public Gtk.Grid build_pagination () { var page_grid = new Gtk.Grid (); page_grid.valign = Gtk.Align.CENTER; page_prev_btn = new Sequeler.Partials.HeaderBarButton ("go-previous-symbolic", _("Previous Page")); page_prev_btn.clicked.connect (go_prev_page); page_prev_btn.halign = Gtk.Align.START; page_prev_btn.sensitive = false; page_next_btn = new Sequeler.Partials.HeaderBarButton ("go-next-symbolic", _("Next Page")); page_next_btn.clicked.connect (go_next_page); page_next_btn.halign = Gtk.Align.END; page_next_btn.sensitive = false; pages_button = new Gtk.Button.with_label (_("%d Pages").printf (tot_pages)); pages_button.can_focus = false; pages_button.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT); pages_button.set_tooltip_text (_("Jump to page…")); pages_entry = new Gtk.SpinButton.with_range (0, 0, 1); pages_entry.margin = 3; pages_entry.value_changed.connect (() => { if (pages_entry.get_value_as_int () > tot_pages) { return; } current_page = pages_entry.get_value_as_int (); reload_results (); }); var pages_popover = new Gtk.Popover (pages_button); pages_popover.add (pages_entry); pages_button.clicked.connect (() => { pages_popover.popup (); pages_popover.show_all (); }); page_grid.attach (page_prev_btn, 0, 0, 1, 1); page_grid.attach (new Gtk.Separator (Gtk.Orientation.VERTICAL), 1, 0, 1, 1); page_grid.attach (pages_button, 2, 0, 1, 1); page_grid.attach (new Gtk.Separator (Gtk.Orientation.VERTICAL), 3, 0, 1, 1); page_grid.attach (page_next_btn, 4, 0, 1, 1); return page_grid; } private void update_pagination () { if (table_count <= settings.limit_results) { pages_button.label = _("1 Page"); pages_entry.set_range (1, 1); return; } tot_pages = (int) Math.ceilf (((float) table_count) / settings.limit_results); pages_button.label = _("%d of %d Pages").printf (current_page, tot_pages); page_prev_btn.sensitive = (current_page > 1); page_next_btn.sensitive = (current_page < tot_pages); pages_entry.set_range (1, tot_pages); } public Gtk.Label build_results_msg () { result_message = new Gtk.Label (_("No Results Available")); result_message.halign = Gtk.Align.START; result_message.margin_top = result_message.margin_bottom = 3; result_message.margin_start = result_message.margin_end = 9; result_message.ellipsize = Pango.EllipsizeMode.END; result_message.hexpand = true; result_message.wrap = true; return result_message; } private Gtk.Button build_reload_btn () { var reload_btn = new Sequeler.Partials.HeaderBarButton ("view-refresh-symbolic", _("Reload Results")); reload_btn.clicked.connect (reload_results); reload_btn.halign = Gtk.Align.END; return reload_btn; } public async void clear () { if (scroll == null) { return; } scroll.destroy (); scroll = new Gtk.ScrolledWindow (null, null); scroll.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.expand = true; scroll_grid.add (scroll); } public async void reset () { if (scroll.get_child () != null) { scroll.remove (scroll.get_child ()); } result_message.label = _("No Results Available"); table_name = ""; database = ""; placeholder (); } public void fill (string? table, string? db_name = null, string? count = null) { if (table == null) { return; } if (table == _table_name && db_name == _database) { return; } // Reset sorting attributes. sortby = null; sort = "ASC"; table_name = table; database = db_name; table_count = count != null ? int.parse (count) : 0; tot_pages = 0; current_page = 1; get_content_and_fill.begin (); } public void reload_results () { if (table_name == "") { return; } get_content_and_fill.begin (); } public async void get_content_and_fill () { if (reloading) { debug ("still loading"); return; } start_spinner (); var query = (window.main.connection_manager.db_type as DataBaseType) .show_table_content (table_name, table_count, current_page, sortby, sort); reloading = true; table_content = yield get_table_content (query); if (table_content == null) { return; } var result_data = new Sequeler.Partials.TreeBuilder ( table_content, window, settings.limit_results, current_page, sortby, sort); build_signals (result_data); result_message.label = _("%d Entries").printf (table_count); yield clear (); update_pagination (); scroll.add (result_data); scroll.show_all (); reloading = false; stop_spinner (); } private async Gda.DataModel? get_table_content (string query) { Gda.DataModel? result = null; result = yield window.main.connection_manager.init_select_query (query); if (result == null) { reloading = false; yield reset (); } return result; } private void build_signals (Sequeler.Partials.TreeBuilder tree) { tree.sortby_column.connect ((column, direction) => { sortby = column; sort = direction; reload_results (); }); } public void go_prev_page () { page_prev_btn.sensitive = false; current_page--; get_content_and_fill.begin (); } public void go_next_page () { page_next_btn.sensitive = false; current_page++; get_content_and_fill.begin (); } } ellie-commons-sequeler-9963fb4/src/Layouts/Views/Query.vala000066400000000000000000000525271512323162700237630ustar00rootroot00000000000000/* * Copyright (c) 2017-2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Layouts.Views.Query : Gtk.Grid { public weak Sequeler.Window window { get; construct; } public Gtk.SourceView query_builder; public Gtk.SourceBuffer buffer; public Gtk.SourceBuffer buffer_copy; public Gtk.SourceStyleSchemeManager style_scheme_manager; public Gtk.CssProvider style_provider; private Gtk.Revealer error_revealer; private Gtk.Label error_message; public Gtk.ScrolledWindow scroll_results; public Gtk.Spinner spinner; public Gtk.Label loading_msg; public Gtk.Label result_message; public Gtk.Image icon_success; public Gtk.Image icon_fail; public Gtk.Button run_button; public Gtk.MenuButton export_button; private string font; public string default_font { get; set; } GLib.File? file; Gda.DataModel? response_data; public Gtk.Paned panels; public Sequeler.Partials.TreeBuilder result_data; public Sequeler.Widgets.QueryParamsDialog? params_dialog { get; set; default = null; } public signal void update_tab_indicator (bool status); public Query (Sequeler.Window main_window) { Object ( orientation: Gtk.Orientation.VERTICAL, window: main_window ); } construct { default_font = new GLib.Settings ("org.gnome.desktop.interface").get_string ("monospace-font-name"); panels = new Gtk.Paned (Gtk.Orientation.VERTICAL); panels.position = settings.query_area; panels.expand = true; attach (panels, 0, 0, 1, 1); var scroll = new Gtk.ScrolledWindow (null, null); scroll.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC); build_query_builder (); scroll.add (query_builder); panels.pack1 (scroll, false, false); panels.pack2 (results_view (), true, false); } public void use_default_font (bool value) { if (!value) { return; } font = default_font; } public void build_query_builder () { var manager = Gtk.SourceLanguageManager.get_default (); style_provider = new Gtk.CssProvider (); style_scheme_manager = new Gtk.SourceStyleSchemeManager (); buffer = new Gtk.SourceBuffer (null); buffer.highlight_syntax = true; buffer.highlight_matching_brackets = true; buffer.language = manager.get_language ("sql"); query_builder = new Gtk.SourceView.with_buffer (buffer); query_builder.show_line_numbers = true; query_builder.highlight_current_line = true; query_builder.show_right_margin = false; query_builder.wrap_mode = Gtk.WrapMode.WORD; query_builder.smart_home_end = Gtk.SourceSmartHomeEndType.AFTER; Gtk.drag_dest_add_uri_targets (query_builder); update_font_style (); update_color_style (); } private string get_current_font_family () { return font.substring (0, font.last_index_of (" ")); } private double get_current_font_size () { return double.parse (font.substring (font.last_index_of (" ") + 1)); } public void update_font_style () { font = Sequeler.settings.font; use_default_font (Sequeler.settings.use_system_font); var font_family = get_current_font_family (); var font_size = get_current_font_size ().to_string (); try { style_provider.load_from_data (" * { font-family: '%s'; font-size: %spx; }".printf (font_family, font_size), -1); query_builder.get_style_context ().add_provider ( style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION ); } catch (Error e) { debug ("Internal error loading session chooser style: %s", e.message); } } public void update_color_style () { buffer.style_scheme = style_scheme_manager.get_scheme (Sequeler.settings.style_scheme); } /** * Get the text buffer based on user cursor, selection, and semicolon */ public string get_text () { Gtk.TextIter start, end; // If a portion of text is selected if (buffer.get_selection_bounds (out start, out end)) { strip_comments (buffer.get_text (start, end, true).strip ()); return buffer_copy.text.strip (); } // If there's a semicolon, return the currently highlighted line if (buffer.text.contains (";")) { buffer.get_selection_bounds (out start, out end); start.set_line_offset (0); start.backward_find_char (is_semicolon, null); if (! start.starts_line ()) { start.forward_char (); } if (end.starts_line ()) { end.backward_char (); } if (!end.ends_line ()) { end.forward_to_line_end (); } end.forward_find_char (is_semicolon, null); debug (buffer.get_text (start, end, true).strip ()); strip_comments (buffer.get_text (start, end, true).strip ()); return buffer_copy.text.strip (); } // Return full text strip_comments (); debug (buffer_copy.text.strip ()); return buffer_copy.text.strip (); } /** * Remove inline comments (//) and block comments (/*) */ public void strip_comments (string? source_text = null) { var text = source_text != null ? source_text : buffer.text; buffer_copy = new Gtk.SourceBuffer (null); buffer_copy.set_text (text); string[] lines = Regex.split_simple ("""[\r\n]""", text); if (lines.length != buffer_copy.get_line_count ()) { warning ("Mismatch between line counts when stripping trailing spaces, not continuing"); return; } MatchInfo info; Gtk.TextIter start_delete, end_delete; Regex comments; try { comments = new Regex ("""\/\*[\s\S]*?\*\/|([^:]|^)\/\/.*$""", 0); } catch (RegexError e) { critical ("Error while building regex to replace trailing whitespace: %s", e.message); return; } // Find comments line by line for (int line_no = 0; line_no < lines.length; line_no++) { if (comments.match (lines[line_no], 0, out info)) { buffer_copy.get_iter_at_line (out start_delete, line_no); start_delete.forward_to_line_end (); end_delete = start_delete; end_delete.backward_chars (info.fetch (0).length); buffer_copy.@delete (ref start_delete, ref end_delete); } } int start_pos, end_pos; // Find leftover comment blocks if (comments.match (text, 0, out info)) { info.fetch_pos (0, out start_pos, out end_pos); buffer_copy.get_iter_at_offset (out start_delete, start_pos); end_delete = start_delete; end_delete.forward_chars (info.fetch (0).length); buffer_copy.@delete (ref start_delete, ref end_delete); } } public Gtk.Grid results_view () { var results_view = new Gtk.Grid (); spinner = new Gtk.Spinner (); spinner.hexpand = true; spinner.halign = Gtk.Align.END; spinner.margin = 10; var action_bar = new Gtk.Grid (); action_bar.get_style_context ().add_class ("library-titlebar"); action_bar.attach (build_loading_msg (), 0, 0, 1, 1); action_bar.attach (spinner, 1, 0, 1, 1); action_bar.attach (build_run_button (), 2, 0, 1, 1); scroll_results = new Gtk.ScrolledWindow (null, null); scroll_results.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC); scroll_results.expand = true; error_revealer = new Gtk.Revealer (); var error_grid = new Gtk.Grid (); error_grid.get_style_context ().add_class ("query-error"); error_grid.hexpand = true; error_grid.margin = 6; error_message = new Gtk.Label (""); error_message.wrap = true; error_message.margin = 6; error_grid.add (error_message); error_revealer.add (error_grid); error_revealer.reveal_child = false; var info_bar = new Gtk.Grid (); info_bar.get_style_context ().add_class ("library-toolbar"); info_bar.attach (build_results_msg (), 0, 0, 1, 1); info_bar.attach (build_export_btn (), 1, 0, 1, 1); results_view.attach (action_bar, 0, 0, 1, 1); results_view.attach (error_revealer, 0, 1, 1, 1); results_view.attach (scroll_results, 0, 2, 1, 1); results_view.attach (info_bar, 0, 3, 1, 1); return results_view; } public Gtk.Label build_loading_msg () { loading_msg = new Gtk.Label (_("Running Query\u2026")); loading_msg.halign = Gtk.Align.START; loading_msg.margin = 10; loading_msg.hexpand = true; loading_msg.wrap = true; toggle_loading_msg (false); return loading_msg; } public void toggle_loading_msg (bool toggle) { loading_msg.visible = toggle; loading_msg.no_show_all = !toggle; } public Gtk.Button build_run_button () { run_button = new Sequeler.Partials.RunQueryButton (); run_button.margin = 10; run_button.action_name = Services.ActionManager.ACTION_PREFIX + Services.ActionManager.ACTION_RUN_QUERY; return run_button; } public Gtk.Grid build_results_msg () { var result_box = new Gtk.Grid (); icon_success = new Gtk.Image.from_icon_name ("process-completed-symbolic", Gtk.IconSize.BUTTON); icon_success.margin_start = 6; icon_success.visible = false; icon_success.no_show_all = true; icon_fail = new Gtk.Image.from_icon_name ("dialog-error-symbolic", Gtk.IconSize.BUTTON); icon_fail.margin_start = 6; icon_fail.visible = false; icon_fail.no_show_all = true; result_message = new Gtk.Label (_("No Results Available")); result_message.halign = Gtk.Align.START; result_message.margin = 6; result_message.margin_top = 6; result_message.hexpand = true; result_message.wrap = true; result_box.attach (icon_success, 0, 0, 1, 1); result_box.attach (icon_fail, 1, 0, 1, 1); result_box.attach (result_message, 2, 0, 1, 1); return result_box; } public void show_result_icon (bool status) { update_tab_indicator (status); if (status) { icon_success.visible = true; icon_success.no_show_all = false; icon_fail.visible = false; icon_fail.no_show_all = true; return; } icon_success.visible = false; icon_success.no_show_all = true; icon_fail.visible = true; icon_fail.no_show_all = false; } public Gtk.Button build_export_btn () { var export_image = new Gtk.Image.from_icon_name ("document-save-symbolic", Gtk.IconSize.BUTTON); export_button = new Gtk.MenuButton (); export_button.label = _("Export Results"); export_button.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT); export_button.always_show_image = true; export_button.set_image (export_image); export_button.can_focus = false; var menu_grid = new Gtk.Grid (); menu_grid.expand = true; menu_grid.margin_top = 3; menu_grid.margin_bottom = 3; menu_grid.orientation = Gtk.Orientation.VERTICAL; var export_csv = new Gtk.ModelButton (); export_csv.label = _("Export as CSV"); export_csv.image = new Gtk.Image.from_icon_name ("x-office-spreadsheet", Gtk.IconSize.BUTTON); export_csv.always_show_image = true; export_csv.clicked.connect (() => { export_results (1); }); var export_text = new Gtk.ModelButton (); export_text.label = _("Export as Text"); export_text.image = new Gtk.Image.from_icon_name ("text-x-generic", Gtk.IconSize.BUTTON); export_text.always_show_image = true; export_text.clicked.connect (() => { export_results (2); }); menu_grid.attach (export_csv, 0, 1, 1, 1); menu_grid.attach (export_text, 0, 2, 1, 1); menu_grid.show_all (); var export_menu = new Gtk.Popover (null); export_menu.add (menu_grid); export_button.popover = export_menu; export_button.direction = Gtk.ArrowType.UP; export_button.sensitive = false; return export_button; } public void run_query (string query) { Gda.Statement statement; Gda.Set params; try { statement = window.main.connection_manager.parse_sql_string (query, out params); } catch (GLib.Error ex) { on_query_error (ex.message); return; } if (statement == null || params == null) { run_query_statement (query, statement, null); return; } for (int i = 0; ; i++) { var holder = params.get_nth_holder (i); if (holder == null) { break; } debug ("holder #%d is %s type: %s", i, holder.get_id (), holder.get_g_type ().name ()); } params_dialog = new Sequeler.Widgets.QueryParamsDialog (window, this, query, statement, params); params_dialog.set_modal (true); params_dialog.show_all (); params_dialog.destroy.connect (() => { params_dialog = null; }); } public void run_query_statement (string query, Gda.Statement statement, Gda.Set? params) { toggle_loading_msg (true); spinner.start (); var select_pos = query.down ().index_of ("select", 0); var show_pos = query.down ().index_of ("show", 0); var pragma_pos = query.down ().index_of ("pragma", 0); var explain_pos = query.down ().index_of ("explain", 0); var describe_pos = query.down ().index_of ("describe", 0); if (select_pos == 0 || show_pos == 0 || pragma_pos == 0 || explain_pos == 0 || describe_pos == 0) { select_statement.begin (statement, params, (obj, res) => { handle_select_response (select_statement.end (res)); }); } else { non_select_statement.begin (statement, params, (obj, res) => { handle_query_response (non_select_statement.end (res)); }); } } private async Gee.HashMap select_statement (Gda.Statement statement, Gda.Set? params) { return yield window.main.connection_manager.init_silent_select_statement (statement, params); } public async Gee.HashMap non_select_statement (Gda.Statement statement, Gda.Set? params) { return yield window.main.connection_manager.init_silent_statement (statement, params); } public void handle_select_response (Gee.HashMap response) { foreach (var entry in response.entries) { response_data = entry.key; on_query_error (entry.value); } if (response_data == null) { toggle_loading_msg (false); spinner.stop (); result_message.label = _("Unable to process Query!"); show_result_icon (false); export_button.sensitive = false; return; } if (error_revealer.get_reveal_child ()) { error_revealer.reveal_child = false; } if (result_data != null) { scroll_results.remove (result_data); result_data = null; } result_data = new Sequeler.Partials.TreeBuilder (response_data, window); toggle_loading_msg (false); spinner.stop (); result_message.label = _("%d Total Results").printf (response_data.get_n_rows ()); show_result_icon (true); scroll_results.add (result_data); scroll_results.show_all (); export_button.sensitive = response_data.get_n_rows () == 0 ? false : true; } public void handle_query_response (Gee.HashMap data) { string? response = null; foreach (var entry in data.entries) { response = entry.key; on_query_error (entry.value); } toggle_loading_msg (false); spinner.stop (); if (result_data != null) { scroll_results.remove (result_data); result_data = null; } if (response == null) { result_message.label = _("Unable to process Query!"); show_result_icon (false); return; } if (error_revealer.get_reveal_child ()) { error_revealer.reveal_child = false; } if (int.parse (response) > 0) { result_message.label = _("Query Successfully Executed! Rows Affected: %s").printf (response); show_result_icon (true); } else { result_message.label = _("Query Executed!"); show_result_icon (true); } window.main.database_schema.reload_schema.begin (); // Force reset all views to fetch updated data window.main.database_view.content.reset.begin (); window.main.database_view.relations.reset.begin (); window.main.database_view.structure.reset.begin (); } private void on_query_error (string error) { if (error == "") { return; } if (result_data != null) { scroll_results.remove (result_data); result_data = null; } error_message.label = error; error_revealer.reveal_child = true; } private bool is_semicolon (unichar semicolon) { return semicolon.to_string () == ";"; } private void export_results (int type) { file = null; var save_dialog = new Gtk.FileChooserNative (_("Pick a file"), window, Gtk.FileChooserAction.SAVE, _("_Save"), _("_Cancel")); save_dialog.do_overwrite_confirmation = true; save_dialog.modal = true; save_dialog.response.connect ((dialog, response_id) => { switch (response_id) { case Gtk.ResponseType.ACCEPT: file = save_dialog.get_file (); save_to_file (type); break; } dialog.destroy (); }); save_dialog.run (); } private void save_to_file (int type) { var options_list = new GLib.SList (); var separator_holder = new Gda.Holder (GLib.Type.STRING); var first_line_holder = new Gda.Holder (GLib.Type.BOOLEAN); var overwrite_holder = new Gda.Holder (GLib.Type.BOOLEAN); separator_holder.id = "SEPARATOR"; try { separator_holder.set_value (","); } catch (GLib.Error err) { window.main.connection_manager.query_warning (err.message); } first_line_holder.id = "NAMES_ON_FIRST_LINE"; try { first_line_holder.set_value (true); } catch (GLib.Error err) { window.main.connection_manager.query_warning (err.message); } overwrite_holder.id = "OVERWRITE"; try { overwrite_holder.set_value (true); } catch (GLib.Error err) { window.main.connection_manager.query_warning (err.message); } options_list.append (separator_holder); options_list.append (first_line_holder); options_list.append (overwrite_holder); var options = new Gda.Set (options_list); switch (type) { case 1: // Export as CSV try { response_data.export_to_file (Gda.DataModelIOFormat.TEXT_SEPARATED, file.get_path (), null, null, options); } catch (GLib.Error err) { window.main.connection_manager.query_warning (err.message); } break; case 2: // Export as plain text try { response_data.export_to_file (Gda.DataModelIOFormat.TEXT_TABLE, file.get_path (), null, null, options); } catch (GLib.Error err) { window.main.connection_manager.query_warning (err.message); } break; } } } ellie-commons-sequeler-9963fb4/src/Layouts/Views/Relations.vala000066400000000000000000000145471512323162700246160ustar00rootroot00000000000000/* * Copyright (c) 2017-2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Layouts.Views.Relations : Gtk.Grid { public weak Sequeler.Window window { get; construct; } public Gtk.Stack stack; public Gtk.Grid scroll_grid; public Gtk.ScrolledWindow scroll; public Gtk.Label result_message; private Gtk.Spinner spinner; private bool reloading { get; set; default = false; } private string _table_name = ""; public string table_name { get { return _table_name; } set { _table_name = value; } } private string _database = ""; public string database { get { return _database; } set { _database = value; } } private string? sortby = null; private string sort = "ASC"; public Relations (Sequeler.Window main_window) { Object ( orientation: Gtk.Orientation.VERTICAL, window: main_window ); } construct { scroll_grid = new Gtk.Grid (); scroll_grid.expand = true; scroll = new Gtk.ScrolledWindow (null, null); scroll.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.expand = true; var info_bar = new Gtk.Grid (); info_bar.get_style_context ().add_class ("library-toolbar"); info_bar.attach (build_results_msg (), 0, 0, 1, 1); info_bar.attach (build_reload_btn (), 1, 0, 1, 1); spinner = new Gtk.Spinner (); spinner.hexpand = true; spinner.vexpand = true; spinner.halign = Gtk.Align.CENTER; spinner.valign = Gtk.Align.CENTER; var welcome = new Granite.Widgets.Welcome (_("Select Table"), _("Select a table from the left sidebar to activate this view.")); stack = new Gtk.Stack (); stack.hexpand = true; stack.vexpand = true; stack.add_named (welcome, "welcome"); stack.add_named (spinner, "spinner"); stack.add_named (scroll_grid, "list"); attach (stack, 0, 0, 1, 1); attach (info_bar, 0, 1, 1, 1); placeholder (); } public void placeholder () { stack.visible_child_name = "welcome"; } public void start_spinner () { spinner.start (); stack.visible_child_name = "spinner"; } public void stop_spinner () { spinner.stop (); stack.visible_child_name = "list"; } public Gtk.Label build_results_msg () { result_message = new Gtk.Label (_("No Results Available")); result_message.halign = Gtk.Align.START; result_message.margin = 7; result_message.margin_top = 6; result_message.hexpand = true; result_message.wrap = true; return result_message; } private Gtk.Button build_reload_btn () { var reload_btn = new Sequeler.Partials.HeaderBarButton ("view-refresh-symbolic", _("Reload Results")); reload_btn.clicked.connect (reload_results); reload_btn.halign = Gtk.Align.END; return reload_btn; } public async void clear () { if (scroll == null) { return; } scroll.destroy (); scroll = new Gtk.ScrolledWindow (null, null); scroll.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.expand = true; scroll_grid.add (scroll); } public async void reset () { if (scroll.get_child () != null) { scroll.remove (scroll.get_child ()); } result_message.label = _("No Results Available"); table_name = ""; database = ""; placeholder (); } public void fill (string? table, string? db_name = null) { if (table == null) { return; } if (table == _table_name && db_name == _database) { return; } // Reset sorting attributes. sortby = null; sort = "ASC"; table_name = table; database = db_name; get_content_and_fill.begin (); } public void reload_results () { if (table_name == "") { return; } get_content_and_fill.begin (); } public async void get_content_and_fill () { if (reloading) { debug ("still loading"); return; } start_spinner (); var query = (window.main.connection_manager.db_type as DataBaseType) .show_table_relations (table_name, database, sortby, sort); reloading = true; var table_relations = yield get_table_relations (query); if (table_relations == null) { return; } var result_data = new Sequeler.Partials.TreeBuilder ( table_relations, window, 0, 0, sortby, sort); build_signals (result_data); result_message.label = table_relations.get_n_rows ().to_string () + _(" Constraints"); yield clear (); scroll.add (result_data); scroll.show_all (); reloading = false; stop_spinner (); } private async Gda.DataModel? get_table_relations (string query) { Gda.DataModel? result = null; result = yield window.main.connection_manager.init_select_query (query); if (result == null) { reloading = false; yield reset (); } return result; } private void build_signals (Sequeler.Partials.TreeBuilder tree) { tree.sortby_column.connect ((column, direction) => { sortby = column; sort = direction; reload_results (); }); } } ellie-commons-sequeler-9963fb4/src/Layouts/Views/Structure.vala000066400000000000000000000145331512323162700246510ustar00rootroot00000000000000/* * Copyright (c) 2011-2019 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Layouts.Views.Structure : Gtk.Grid { public weak Sequeler.Window window { get; construct; } public Gtk.Stack stack; public Gtk.Grid scroll_grid; public Gtk.ScrolledWindow scroll; public Gtk.Label result_message; private Gtk.Spinner spinner; private bool reloading { get; set; default = false; } private string _table_name = ""; public string table_name { get { return _table_name; } set { _table_name = value; } } private string _database = ""; public string database { get { return _database; } set { _database = value; } } private string? sortby = null; private string sort = "ASC"; public Structure (Sequeler.Window main_window) { Object ( orientation: Gtk.Orientation.VERTICAL, window: main_window ); } construct { scroll_grid = new Gtk.Grid (); scroll_grid.expand = true; scroll = new Gtk.ScrolledWindow (null, null); scroll.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.expand = true; scroll_grid.add (scroll); var info_bar = new Gtk.Grid (); info_bar.get_style_context ().add_class ("library-toolbar"); info_bar.attach (build_results_msg (), 0, 0, 1, 1); info_bar.attach (build_reload_btn (), 1, 0, 1, 1); spinner = new Gtk.Spinner (); spinner.hexpand = true; spinner.vexpand = true; spinner.halign = Gtk.Align.CENTER; spinner.valign = Gtk.Align.CENTER; var welcome = new Granite.Widgets.Welcome (_("Select Table"), _("Select a table from the left sidebar to activate this view.")); stack = new Gtk.Stack (); stack.hexpand = true; stack.vexpand = true; stack.add_named (welcome, "welcome"); stack.add_named (spinner, "spinner"); stack.add_named (scroll_grid, "list"); attach (stack, 0, 0, 1, 1); attach (info_bar, 0, 1, 1, 1); placeholder (); } public void placeholder () { stack.visible_child_name = "welcome"; } public void start_spinner () { spinner.start (); stack.visible_child_name = "spinner"; } public void stop_spinner () { spinner.stop (); stack.visible_child_name = "list"; } public Gtk.Label build_results_msg () { result_message = new Gtk.Label (_("No Results Available")); result_message.halign = Gtk.Align.START; result_message.margin = 7; result_message.margin_top = 6; result_message.hexpand = true; result_message.wrap = true; return result_message; } private Gtk.Button build_reload_btn () { var reload_btn = new Sequeler.Partials.HeaderBarButton ("view-refresh-symbolic", _("Reload Results")); reload_btn.clicked.connect (reload_results); reload_btn.halign = Gtk.Align.END; return reload_btn; } public async void clear () { if (scroll == null) { return; } scroll.destroy (); scroll = new Gtk.ScrolledWindow (null, null); scroll.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC; scroll.expand = true; scroll_grid.add (scroll); } public async void reset () { if (scroll.get_child () != null) { scroll.remove (scroll.get_child ()); } result_message.label = _("No Results Available"); table_name = ""; database = ""; placeholder (); } public void fill (string? table, string? db_name = null) { if (table == null) { return; } if (table == _table_name && db_name == _database) { return; } // Reset sorting attributes. sortby = null; sort = "ASC"; table_name = table; database = db_name; get_content_and_fill.begin (); } public void reload_results () { if (table_name == "") { return; } get_content_and_fill.begin (); } public async void get_content_and_fill () { if (reloading) { debug ("still loading"); return; } start_spinner (); var query = (window.main.connection_manager.db_type as DataBaseType) .show_table_structure (table_name, sortby, sort); reloading = true; var table_schema = yield get_table_schema (query); if (table_schema == null) { return; } var result_data = new Sequeler.Partials.TreeBuilder (table_schema, window, 0, 0, sortby, sort); build_signals (result_data); result_message.label = table_schema.get_n_rows ().to_string () + _(" Fields"); yield clear (); scroll.add (result_data); scroll.show_all (); reloading = false; stop_spinner (); } private async Gda.DataModel? get_table_schema (string query) { Gda.DataModel? result = null; result = yield window.main.connection_manager.init_select_query (query); if (result == null) { reloading = false; yield reset (); } return result; } private void build_signals (Sequeler.Partials.TreeBuilder tree) { tree.sortby_column.connect ((column, direction) => { sortby = column; sort = direction; reload_results (); }); } } ellie-commons-sequeler-9963fb4/src/Layouts/Welcome.vala000066400000000000000000000106461512323162700231500ustar00rootroot00000000000000/* * Copyright (c) 2011-2018 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Layouts.Welcome : Granite.Widgets.Welcome { public unowned Sequeler.Window window { get; construct; } public Welcome (Sequeler.Window main_window) { Object ( window: main_window, title: _("Welcome to Sequeler"), subtitle: _("Connect to Any Local or Remote Database.") ); } construct { valign = Gtk.Align.FILL; halign = Gtk.Align.FILL; vexpand = true; append ("bookmark-new", _("Add a New Database"), _("Connect to a Database and Save It in Your Library")); append ("window-new", _("New Window"), _("Open a New Sequeler Window")); append ("folder-download", _("Import Connections"), _("Import Previously Exported Sequeler Connections")); activated.connect ( index => { switch (index) { case 0: Sequeler.Services.ActionManager.action_from_group (Sequeler.Services.ActionManager.ACTION_NEW_CONNECTION, window.get_action_group ("win")); break; case 1: Sequeler.Services.ActionManager.action_from_group (Sequeler.Services.ActionManager.ACTION_NEW_WINDOW, window.get_action_group ("win")); break; case 2: import_file (); break; } }); } private void import_file () { var open_dialog = new Gtk.FileChooserNative (_("Select a file"), window, Gtk.FileChooserAction.OPEN, _("_Open"), _("_Cancel")); open_dialog.local_only = true; open_dialog.modal = true; open_dialog.response.connect (open_file); open_dialog.run (); } private void open_file (Gtk.NativeDialog dialog, int response_id) { var open_dialog = dialog as Gtk.FileChooserNative; switch (response_id) { case Gtk.ResponseType.ACCEPT: var file = open_dialog.get_file (); uint8[] file_contents; try { file.load_contents (null, out file_contents, null); } catch (GLib.Error err) { import_warning (err.message); } var imported_connections = (string) file_contents; var data = imported_connections.split ("---\n"); foreach (var import in data) { if (import == "") { continue; } var array = settings.arraify_data (import); array["id"] = settings.tot_connections.to_string (); settings.add_connection (array); } window.main.library.reload_library.begin (); break; case Gtk.ResponseType.CANCEL: break; } open_dialog.destroy (); } private void import_warning (string message) { var message_dialog = new Granite.MessageDialog.with_image_from_icon_name (_("Unable to Import Library "), message, "dialog-error", Gtk.ButtonsType.NONE); message_dialog.transient_for = window; var suggested_button = new Gtk.Button.with_label ("Close"); message_dialog.add_action_widget (suggested_button, Gtk.ResponseType.ACCEPT); message_dialog.show_all (); if (message_dialog.run () == Gtk.ResponseType.ACCEPT) {} message_dialog.destroy (); } } ellie-commons-sequeler-9963fb4/src/Main.vala000066400000000000000000000023371512323162700207770ustar00rootroot00000000000000/* * Copyright (c) 2011-2018 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ #if IS_DEVEL public const string APP_NAME = "(Development) Sequeler"; #else public const string APP_NAME = "Sequeler"; #endif public const string TERMINAL_NAME = "sequeler"; public static int main (string[] args) { Environment.set_application_name ("Sequeler"); Environment.set_prgname ("Sequeler"); var application = new Sequeler.Application (); return application.run (args); } ellie-commons-sequeler-9963fb4/src/Partials/000077500000000000000000000000001512323162700210205ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/src/Partials/ButtonType.vala000066400000000000000000000040551512323162700240060ustar00rootroot00000000000000/* * Copyright (c) 2011-2018 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ namespace Sequeler.Partials { public class HeaderBarButton : Gtk.Button { public HeaderBarButton (string icon_name, string tooltip) { can_focus = false; Gtk.Image image; if (icon_name.contains ("/")) { image = new Gtk.Image.from_resource (icon_name); } else { image = new Gtk.Image.from_icon_name (icon_name, Gtk.IconSize.BUTTON); } image.margin = 3; get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT); set_tooltip_text (tooltip); add (image); } } public class ToolBarButton : Gtk.Grid { public ToolBarButton (string icon_name, string tooltip, string label) { name = tooltip; halign = Gtk.Align.CENTER; Gtk.Image icon; var title = new Gtk.Label (label); if (icon_name.contains ("/")) { icon = new Gtk.Image.from_resource (icon_name); } else { icon = new Gtk.Image.from_icon_name (icon_name, Gtk.IconSize.BUTTON); } icon.margin = 2; attach (icon, 0, 0, 1, 1); attach (title, 1, 0, 1, 1); } } } ellie-commons-sequeler-9963fb4/src/Partials/DataBasePanel.vala000066400000000000000000000134151512323162700243150ustar00rootroot00000000000000/* * Copyright (c) 2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Partials.DataBasePanel : Gtk.Revealer { public weak Sequeler.Window window { get; construct; } private Gtk.Label title; private Sequeler.Partials.Entry db_entry; private Gtk.Stack button_stack; private Gtk.Button button_save; private Gtk.Button button_edit; private Gtk.Button button_cancel; private Gtk.Spinner spinner; public bool reveal { get { return reveal_child; } set { reveal_child = value; spinner.stop (); button_cancel.sensitive = true; } } public DataBasePanel (Sequeler.Window main_window) { Object ( window: main_window ); } construct { valign = Gtk.Align.START; hexpand = true; transition_type = Gtk.RevealerTransitionType.SLIDE_DOWN; reveal_child = false; var panel = new Gtk.Grid (); panel.margin = 9; panel.get_style_context ().add_class ("database-panel"); // Title area. title = new Gtk.Label (""); title.get_style_context ().add_class ("h4"); title.margin_start = title.margin_end = 3; title.margin_top = 6; title.ellipsize = Pango.EllipsizeMode.END; // Body area. var body = new Gtk.Grid (); body.margin = 3; db_entry = new Sequeler.Partials.Entry (_("Database name"), null); db_entry.margin = 6; db_entry.changed.connect (change_sensitivity); body.add (db_entry); // Action buttons area. var buttons_area = new Gtk.Grid (); buttons_area.hexpand = true; buttons_area.get_style_context ().add_class ("database-panel-bottom"); button_cancel = new Gtk.Button.with_label (_("Cancel")); button_cancel.clicked.connect (() => { window.main.database_schema.hide_database_panel (); }); button_cancel.margin = 9; button_save = new Gtk.Button.with_label (_("Save")); button_save.get_style_context ().add_class (Gtk.STYLE_CLASS_SUGGESTED_ACTION); button_save.margin = 9; button_save.sensitive = false; button_save.clicked.connect (() => { window.main.database_schema.create_database.begin (db_entry.text); }); button_edit = new Gtk.Button.with_label (_("Edit")); button_edit.get_style_context ().add_class (Gtk.STYLE_CLASS_SUGGESTED_ACTION); button_edit.margin = 9; button_edit.sensitive = false; button_edit.clicked.connect (() => { var dialog = new Granite.MessageDialog.with_image_from_icon_name (_("Are you sure you want to edit this Database?"), _("This is a dangerous operation and it might cause data loss, a backup before proceeding is recommended."), "dialog-warning", Gtk.ButtonsType.CANCEL); dialog.transient_for = window; var suggested_button = new Gtk.Button.with_label (_("Yes, proceed!")); suggested_button.get_style_context ().add_class (Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION); dialog.add_action_widget (suggested_button, Gtk.ResponseType.ACCEPT); dialog.show_all (); if (dialog.run () == Gtk.ResponseType.ACCEPT) { button_cancel.sensitive = false; spinner.start (); button_stack.visible_child_name = "spinner"; window.main.database_schema.edit_database.begin (db_entry.text); } dialog.destroy (); }); spinner = new Gtk.Spinner (); spinner.hexpand = true; spinner.vexpand = true; spinner.halign = Gtk.Align.CENTER; spinner.valign = Gtk.Align.CENTER; button_stack = new Gtk.Stack (); button_stack.expand = false; button_stack.add_named (button_save, "new"); button_stack.add_named (button_edit, "edit"); button_stack.add_named (spinner, "spinner"); var separator = new Gtk.Separator (Gtk.Orientation.HORIZONTAL); separator.expand = true; separator.halign = Gtk.Align.CENTER; buttons_area.attach (button_cancel, 0, 0); buttons_area.attach (separator, 1, 0); buttons_area.attach (button_stack, 2, 0); panel.attach (title, 0, 0); panel.attach (body, 0, 1); panel.attach (buttons_area, 0, 2); add (panel); } private void change_sensitivity () { button_save.sensitive = db_entry.text != ""; button_edit.sensitive = db_entry.text != ""; } public void new_database () { spinner.stop (); button_cancel.sensitive = true; title.label = _("Create a new Database"); db_entry.text = ""; button_stack.visible_child_name = "new"; } public void edit_database (string name) { spinner.stop (); button_cancel.sensitive = true; title.label = _("Edit Database"); db_entry.text = name; button_stack.visible_child_name = "edit"; } } ellie-commons-sequeler-9963fb4/src/Partials/DatabaseTable.vala000066400000000000000000000042541512323162700243460ustar00rootroot00000000000000/* * Copyright (c) 2017-2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Partials.DataBaseTable : Granite.Widgets.SourceList.Item { private Gtk.Menu menu; private Granite.Widgets.SourceList source_list; public DataBaseTable (string table_name = "", Granite.Widgets.SourceList list) { name = table_name; source_list = list; editable = true; build_context_menu (); } public override Gtk.Menu? get_context_menu () { return menu; } private void build_context_menu () { menu = new Gtk.Menu (); Gtk.MenuItem copy_item = new Gtk.MenuItem.with_label (_("Copy table name")); Gtk.MenuItem edit_item = new Gtk.MenuItem.with_label (_("Edit table name")); copy_item.activate.connect (() => { Gdk.Display display = Gdk.Display.get_default (); Gtk.Clipboard clipboard = Gtk.Clipboard.get_default (display); clipboard.set_text (name, -1); }); copy_item.show (); edit_item.activate.connect (() => { source_list.start_editing_item (this); }); edit_item.show (); menu.append (copy_item); menu.append (edit_item); /* Wayland complains if not set */ menu.realize.connect (() => { Gdk.Window child = menu.get_window (); child.set_type_hint (Gdk.WindowTypeHint.POPUP_MENU); }); } } ellie-commons-sequeler-9963fb4/src/Partials/Helpers.vala000066400000000000000000000113671512323162700232770ustar00rootroot00000000000000/* * Copyright (c) 2011-2018 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ namespace Sequeler.Partials { public class TitleBar : Gtk.Grid { public TitleBar (string text) { get_style_context ().add_class ("library-titlebar"); var title = new Gtk.Label (text); title.get_style_context ().add_class ("h4"); title.halign = Gtk.Align.CENTER; title.margin = 4; title.hexpand = true; this.add (title); } } public class ResponseMessage : Gtk.Label { public ResponseMessage () { get_style_context ().add_class ("h4"); halign = Gtk.Align.CENTER; valign = Gtk.Align.CENTER; justify = Gtk.Justification.CENTER; set_line_wrap (true); margin_bottom = 10; } } public class Entry : Gtk.Entry { public Entry (string? placeholder, string? val) { hexpand = true; if (placeholder != null) { placeholder_text = placeholder; } if (val != null) { text = val; } } } public class ButtonClass : Gtk.Button { public ButtonClass (string text, string* class) { label = text; if (class != null) { var style_context = this.get_style_context (); style_context.add_class (class); } } } public class TableRow : Gtk.Grid { public TableRow (string text, int type) { if (type % 2 == 0) { get_style_context ().add_class ("row-odd"); } else { get_style_context ().add_class ("row-even"); } var title = new Gtk.Label (text); title.get_style_context ().add_class ("h4"); title.halign = Gtk.Align.START; title.margin_start = 6; title.margin_end = 6; title.hexpand = true; this.add (title); } } public class LabelForm : Gtk.Label { public LabelForm (string text) { label = text; halign = Gtk.Align.END; } } class UrlButton : Gtk.Button { public UrlButton (string label, string uri, string icon_name) { get_style_context ().add_class (Granite.STYLE_CLASS_ACCENT); get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT); tooltip_text = uri; var icon = new Gtk.Image.from_icon_name (icon_name, Gtk.IconSize.SMALL_TOOLBAR); icon.valign = Gtk.Align.CENTER; var title = new Gtk.Label (label); title.ellipsize = Pango.EllipsizeMode.END; var grid = new Gtk.Grid (); grid.column_spacing = 6; grid.add (icon); grid.add (title); add (grid); clicked.connect (() => { try { AppInfo.launch_default_for_uri (uri, null); } catch (Error e) { warning ("%s\n", e.message); } }); } } public class RunQueryButton : Gtk.Button { public RunQueryButton () { set_label (_("Run Query")); get_style_context ().add_class ("suggested-action"); get_style_context ().add_class ("notebook-temp-fix"); always_show_image = true; image = new Gtk.Image.from_icon_name ("media-playback-start-symbolic", Gtk.IconSize.BUTTON); image.valign = Gtk.Align.CENTER; tooltip_markup = Granite.markup_accel_tooltip ({"Return"}, _("Run Query")); } } public class ParamEntry : Gtk.Entry { public ParamEntry (Widgets.QueryParamsDialog dialog, Gtk.InputPurpose? purpose = null) { hexpand = true; if (purpose != null) { set_input_purpose (purpose); } activate.connect (() => { dialog.run_query (); }); } } } ellie-commons-sequeler-9963fb4/src/Partials/LibraryItem.vala000066400000000000000000000252361512323162700241200ustar00rootroot00000000000000/* * Copyright (c) 2017-2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Partials.LibraryItem : Gtk.ListBoxRow { public Gee.HashMap data { get; set; } public Gtk.Label title; public Gdk.RGBA color; public Gtk.Revealer main_revealer; private Gtk.Revealer motion_revealer; public Gtk.ModelButton connect_button; public Gtk.Spinner spinner; public Gtk.ScrolledWindow scrolled { get; set; } private bool scroll_up = false; private bool scrolling = false; private bool should_scroll = false; public Gtk.Adjustment vadjustment; private const int SCROLL_STEP_SIZE = 5; private const int SCROLL_DISTANCE = 30; private const int SCROLL_DELAY = 50; public signal void edit_dialog (Gee.HashMap data); public signal void duplicate_connection (Gee.HashMap data); public signal void confirm_delete ( Gtk.ListBoxRow item, Gee.HashMap data ); public signal void connect_to ( Gee.HashMap data, Gtk.Spinner spinner, Gtk.ModelButton button ); // Datatype restrictions on DnD (Gtk.TargetFlags). const Gtk.TargetEntry[] TARGET_ENTRIES_LABEL = { { "LIBRARYITEM", Gtk.TargetFlags.SAME_APP, 0 } }; public LibraryItem (Gee.HashMap data) { Object ( data: data ); get_style_context ().add_class ("library-box"); expand = true; var box = new Gtk.Grid (); box.get_style_context ().add_class ("library-inner-box"); box.margin = 3; var color_box = new Gtk.Grid (); color_box.get_style_context ().add_class ("library-colorbox"); color_box.set_size_request (12, 12); color_box.margin = 9; color = Gdk.RGBA (); color.parse (data["color"]); try { var style = new Gtk.CssProvider (); style.load_from_data ( "* {background-color: %s;}".printf (color.to_string ()), -1 ); color_box.get_style_context ().add_provider ( style, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION ); } catch (Error e) { debug ( "Internal error loading session chooser style: %s", e.message ); } title = new Gtk.Label (data["title"]); title.get_style_context ().add_class ("text-bold"); title.halign = Gtk.Align.START; title.ellipsize = Pango.EllipsizeMode.END; title.margin_end = 9; title.set_line_wrap (true); title.hexpand = true; box.attach (color_box, 0, 0, 1, 1); box.attach (title, 1, 0, 1, 1); connect_button = new Gtk.ModelButton (); connect_button.text = _("Connect"); var edit_button = new Gtk.ModelButton (); edit_button.text = _("Edit Connection"); var duplicate_button = new Gtk.ModelButton (); duplicate_button.text = _("Duplicate Connection"); var delete_button = new Gtk.ModelButton (); delete_button.text = _("Delete Connection"); var open_menu = new Gtk.MenuButton (); open_menu.set_image ( new Gtk.Image.from_icon_name ( "view-more-symbolic", Gtk.IconSize.SMALL_TOOLBAR ) ); open_menu.get_style_context ().add_class ("library-btn"); open_menu.tooltip_text = _("Options"); var menu_separator = new Gtk.Separator (Gtk.Orientation.HORIZONTAL); menu_separator.margin_top = 6; menu_separator.margin_bottom = 6; var menu_grid = new Gtk.Grid (); menu_grid.expand = true; menu_grid.margin_top = 3; menu_grid.margin_bottom = 3; menu_grid.orientation = Gtk.Orientation.VERTICAL; menu_grid.attach (connect_button, 0, 1, 1, 1); menu_grid.attach (edit_button, 0, 2, 1, 1); menu_grid.attach (duplicate_button, 0, 3, 1, 1); menu_grid.attach (menu_separator, 0, 4, 1, 1); menu_grid.attach (delete_button, 0, 5, 1, 1); menu_grid.show_all (); var menu_popover = new Gtk.Popover (null); menu_popover.add (menu_grid); open_menu.popover = menu_popover; open_menu.relief = Gtk.ReliefStyle.NONE; open_menu.valign = Gtk.Align.CENTER; spinner = new Gtk.Spinner (); box.attach (spinner, 2, 0, 1, 1); box.attach (open_menu, 3, 0, 1, 1); var motion_grid = new Gtk.Grid (); motion_grid.margin = 6; motion_grid.get_style_context ().add_class ("grid-motion"); motion_grid.height_request = 18; motion_revealer = new Gtk.Revealer (); motion_revealer.transition_type = Gtk.RevealerTransitionType.SLIDE_DOWN; motion_revealer.add (motion_grid); box.attach (motion_revealer, 0, 1, 4, 1); var event_box = new Gtk.EventBox (); event_box.add (box); main_revealer = new Gtk.Revealer (); main_revealer.reveal_child = true; main_revealer.transition_type = Gtk.RevealerTransitionType.SLIDE_DOWN; main_revealer.add (event_box); add (main_revealer); delete_button.clicked.connect (() => { confirm_delete (this, data); }); edit_button.clicked.connect (() => { edit_dialog (data); }); duplicate_button.clicked.connect (() => { duplicate_connection (data); }); connect_button.clicked.connect (() => { spinner.start (); connect_button.sensitive = false; connect_to (data, spinner, connect_button); }); event_box.enter_notify_event.connect (event => { box.set_state_flags (Gtk.StateFlags.PRELIGHT, true); return false; }); event_box.leave_notify_event.connect (event => { if (event.detail != Gdk.NotifyType.INFERIOR) { box.set_state_flags (Gtk.StateFlags.NORMAL, true); } return false; }); open_menu.clicked.connect (event => { box.set_state_flags (Gtk.StateFlags.PRELIGHT, true); }); menu_popover.closed.connect (event => { box.set_state_flags (Gtk.StateFlags.NORMAL, true); }); build_drag_and_drop (); } private void build_drag_and_drop () { // Make this a draggable widget Gtk.drag_source_set ( this, Gdk.ModifierType.BUTTON1_MASK, TARGET_ENTRIES_LABEL, Gdk.DragAction.MOVE ); drag_begin.connect (on_drag_begin); drag_data_get.connect (on_drag_data_get); // Make this widget a DnD destination. Gtk.drag_dest_set ( this, Gtk.DestDefaults.MOTION, TARGET_ENTRIES_LABEL, Gdk.DragAction.MOVE ); drag_motion.connect (on_drag_motion); drag_leave.connect (on_drag_leave); drag_end.connect (clear_indicator); } private void on_drag_begin (Gtk.Widget widget, Gdk.DragContext context) { var row = (Partials.LibraryItem) widget; Gtk.Allocation alloc; row.get_allocation (out alloc); var surface = new Cairo.ImageSurface (Cairo.Format.ARGB32, alloc.width, alloc.height); var cr = new Cairo.Context (surface); cr.set_source_rgba (0, 0, 0, 0.3); cr.set_line_width (1); cr.move_to (0, 0); cr.line_to (alloc.width, 0); cr.line_to (alloc.width, alloc.height); cr.line_to (0, alloc.height); cr.line_to (0, 0); cr.stroke (); cr.set_source_rgba (255, 255, 255, 0.5); cr.rectangle (0, 0, alloc.width, alloc.height); cr.fill (); row.draw (cr); Gtk.drag_set_icon_surface (context, surface); main_revealer.reveal_child = false; } private void on_drag_data_get (Gtk.Widget widget, Gdk.DragContext context, Gtk.SelectionData selection_data, uint target_type, uint time) { uchar[] data = new uchar[(sizeof (Partials.LibraryItem))]; ((Gtk.Widget[])data)[0] = widget; selection_data.set ( Gdk.Atom.intern_static_string ("LIBRARYITEM"), 32, data ); } public void clear_indicator (Gdk.DragContext context) { main_revealer.reveal_child = true; } public bool on_drag_motion (Gdk.DragContext context, int x, int y, uint time) { motion_revealer.reveal_child = true; int index = get_index (); Gtk.Allocation alloc; get_allocation (out alloc); int real_y = (index * alloc.height) - alloc.height + y; check_scroll (real_y); if (should_scroll && !scrolling) { scrolling = true; Timeout.add (SCROLL_DELAY, scroll); } return true; } private void check_scroll (int y) { vadjustment = scrolled.vadjustment; if (vadjustment == null) { return; } double vadjustment_min = vadjustment.value; double vadjustment_max = vadjustment.page_size + vadjustment_min; double show_min = double.max (0, y - SCROLL_DISTANCE); double show_max = double.min (vadjustment.upper, y + SCROLL_DISTANCE); if (vadjustment_min > show_min) { should_scroll = true; scroll_up = true; } else if (vadjustment_max < show_max) { should_scroll = true; scroll_up = false; } else { should_scroll = false; } } private bool scroll () { if (should_scroll) { if (scroll_up) { vadjustment.value -= SCROLL_STEP_SIZE; } else { vadjustment.value += SCROLL_STEP_SIZE; } } else { scrolling = false; } return should_scroll; } public void on_drag_leave (Gdk.DragContext context, uint time) { motion_revealer.reveal_child = false; should_scroll = false; } } ellie-commons-sequeler-9963fb4/src/Partials/TreeBuilder.vala000066400000000000000000000160631512323162700241010ustar00rootroot00000000000000/* * Copyright (c) 2011-2019 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Partials.TreeBuilder : Gtk.TreeView { public weak Sequeler.Window window { get; construct; } public Gda.DataModel data { get; construct; } public int per_page { get; construct; } public int current_page { get; construct; } public string? sortby { get; set construct; } public string sort { get; set construct; } public Gtk.ListStore store; public string? error_message { get; set; default = null; } public string background; public int tot_columns; private string bg_light = "rgba(255,255,255,0.05)"; private string bg_dark = "rgba(0,0,0,0.05)"; public signal void sortby_column (string column, string direction); public TreeBuilder ( Gda.DataModel response, Sequeler.Window main_window, int per_page = 0, int current_page = 0, string? sortby = null, string sort = "ASC" ) { Object ( window: main_window, data: response, per_page: per_page, current_page: current_page, sortby: sortby, sort: sort ); } construct { Gtk.TreeViewColumn column; var renderer = new Gtk.CellRendererText (); renderer.single_paragraph_mode = true; tot_columns = data.get_n_columns (); var the_types = new GLib.Type [tot_columns + 1]; for (int col = 0; col < tot_columns; col++) { the_types[col] = data.describe_column (col).get_g_type (); var title = data.get_column_title (col).replace ("_", "__"); column = new Gtk.TreeViewColumn.with_attributes (title, renderer, "text", col, "background", tot_columns, null); column.clickable = true; column.resizable = true; column.expand = true; column.set_data ("model_column_id", col); if (col > 0) { column.sizing = Gtk.TreeViewColumnSizing.FIXED; column.fixed_width = 150; } if (sortby != null && sortby.replace ("_", "__") == title) { column.sort_indicator = true; column.sort_order = sort == "ASC" ? Gtk.SortType.ASCENDING : Gtk.SortType.DESCENDING; } column.clicked.connect (init_sortby_column); append_column (column); } the_types[tot_columns] = typeof (string); store = new Gtk.ListStore.newv (the_types); Gda.DataModelIter _iter = data.create_iter (); Gtk.TreeIter iter; if (per_page != 0 && data.get_n_rows () > per_page) { int counter = 1; int offset = (per_page * (current_page - 1)); if (current_page != 0 && offset != 0) { _iter.move_to_row ((offset - 1)); } while (counter <= per_page && _iter.move_next ()) { append_value (_iter, iter); counter++; } } else { while (_iter.move_next ()) { append_value (_iter, iter); } } if (error_message != null) { window.main.connection_manager.query_warning (error_message); error_message = null; } set_model (store); } private void append_value (Gda.DataModelIter _iter, Gtk.TreeIter iter) { background = _iter.get_row () % 2 == 0 ? bg_light : bg_dark; store.append (out iter); for (int i = 0; i < tot_columns; i++) { var placeholder_type = data.describe_column (i).get_g_type (); try { var raw_value = _iter.get_value_at_e (i); var sanitized_value = raw_value.strdup_contents () != "NULL" ? raw_value : GLib.Value (placeholder_type); store.set_value (iter, i, sanitized_value); } catch (Error e) { error_message = "%s %s %s %s: %s".printf (_("Error"), e.code.to_string (), _("on Column"), data.get_column_title (i), e.message.to_string ()); } } store.set_value (iter, tot_columns, background); } public void init_sortby_column (Gtk.TreeViewColumn column) { // Detect sort order. sort = "ASC"; if (column.sort_order == Gtk.SortType.ASCENDING) { sort = "DESC"; } sortby_column (column.title.replace ("__", "_"), sort); } private void copy_column_data (Gdk.EventButton event, Gtk.TreePath path, Gtk.TreeViewColumn column) { if (path == null || column == null) { return; } Value val; Gtk.TreeIter iter; Gdk.Display display = Gdk.Display.get_default (); Gtk.Clipboard clipboard = Gtk.Clipboard.get_default (display); model.get_iter (out iter, path); model.get_value (iter, column.get_data ("model_column_id"), out val); Gda.DataHandler handler = Gda.DataHandler.get_default (val.type ()); string? column_data = handler.get_str_from_value (val); if (column_data == null) { column_data = ""; } clipboard.set_text (column_data, -1); } private Gtk.Menu create_context_menu (Gdk.EventButton event, Gtk.TreePath path, Gtk.TreeViewColumn column) { Gtk.Menu menu = new Gtk.Menu (); Gtk.MenuItem item = new Gtk.MenuItem.with_label (_("Copy %s").printf (column.get_title ())); item.activate.connect (() => { copy_column_data (event, path, column); }); item.show (); menu.append (item); /* Wayland complains if not set */ menu.realize.connect (() => { Gdk.Window child = menu.get_window (); child.set_type_hint (Gdk.WindowTypeHint.POPUP_MENU); }); return menu; } public override bool button_press_event (Gdk.EventButton event) { if (event.triggers_context_menu () && event.type == Gdk.EventType.BUTTON_PRESS) { Gtk.TreePath path; Gtk.TreeViewColumn column; get_path_at_pos ((int) event.x, (int) event.y, out path, out column, null, null); if (path != null) { var menu = create_context_menu (event, path, column); menu.popup_at_pointer (event); return true; } } return base.button_press_event (event); } } ellie-commons-sequeler-9963fb4/src/Services/000077500000000000000000000000001512323162700210245ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/src/Services/ActionManager.vala000066400000000000000000000237721512323162700244140ustar00rootroot00000000000000/* * Copyright (c) 2011-2018 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Services.ActionManager : Object { public const int FONT_SIZE_MAX = 72; public const int FONT_SIZE_MIN = 7; public weak Sequeler.Application app { get; construct; } public weak Sequeler.Window window { get; construct; } public SimpleActionGroup actions { get; construct; } public const string ACTION_PREFIX = "win."; public const string ACTION_NEW_WINDOW = "action_new_window"; public const string ACTION_NEW_CONNECTION = "action_new_connection"; public const string ACTION_RUN_QUERY = "action_run_query"; public const string ACTION_LOGOUT = "action_logout"; public const string ACTION_QUIT = "action_quit"; public const string ACTION_ZOOM_DEFAULT = "action_zoom_default"; public const string ACTION_ZOOM_IN = "action_zoom_in"; public const string ACTION_ZOOM_OUT = "action_zoom_out"; public const string ACTION_NEW_DB = "action_new_db"; public const string ACTION_EDIT_DB = "action_edit_db"; public const string ACTION_DELETE_DB = "action_delete_db"; public static Gee.MultiMap action_accelerators = new Gee.HashMultiMap (); private const ActionEntry[] ACTION_ENTRIES = { { ACTION_NEW_WINDOW, action_new_window }, { ACTION_NEW_CONNECTION, action_new_connection }, { ACTION_RUN_QUERY, action_run_query }, { ACTION_LOGOUT, action_logout }, { ACTION_QUIT, action_quit }, { ACTION_ZOOM_DEFAULT, action_set_default_zoom }, { ACTION_ZOOM_IN, action_zoom_in }, { ACTION_ZOOM_OUT, action_zoom_out}, { ACTION_NEW_DB, action_new_db}, { ACTION_EDIT_DB, action_edit_db}, { ACTION_DELETE_DB, action_delete_db} }; public ActionManager (Sequeler.Application sequeler_app, Sequeler.Window main_window) { Object ( app: sequeler_app, window: main_window ); } static construct { action_accelerators.set (ACTION_NEW_WINDOW, "n"); action_accelerators.set (ACTION_NEW_CONNECTION, "n"); action_accelerators.set (ACTION_RUN_QUERY, "Return"); action_accelerators.set (ACTION_LOGOUT, "Escape"); action_accelerators.set (ACTION_QUIT, "q"); action_accelerators.set (ACTION_ZOOM_DEFAULT, "0"); action_accelerators.set (ACTION_ZOOM_DEFAULT, "KP_0"); action_accelerators.set (ACTION_ZOOM_IN, "plus"); action_accelerators.set (ACTION_ZOOM_IN, "equal"); action_accelerators.set (ACTION_ZOOM_IN, "KP_Add"); action_accelerators.set (ACTION_ZOOM_OUT, "minus"); action_accelerators.set (ACTION_ZOOM_OUT, "KP_Subtract"); action_accelerators.set (ACTION_NEW_DB, "N"); action_accelerators.set (ACTION_EDIT_DB, "P"); action_accelerators.set (ACTION_DELETE_DB, "D"); } construct { actions = new SimpleActionGroup (); actions.add_action_entries (ACTION_ENTRIES, this); window.insert_action_group ("win", actions); foreach (var action in action_accelerators.get_keys ()) { var accels_array = action_accelerators[action].to_array (); accels_array += null; app.set_accels_for_action (ACTION_PREFIX + action, accels_array); } } private void action_quit () { window.before_destroy (); } private void action_logout () { window.headerbar.toggle_logout.begin (); window.headerbar.title = APP_NAME; window.headerbar.subtitle = null; if (window.main.database_schema.scroll.get_child () != null) { window.main.database_schema.scroll.remove (window.main.database_schema.scroll.get_child ()); } if (window.main.database_view.query.n_tabs > 0) { (window.main.database_view.query.current.page as Layouts.Views.Query).buffer.text = ""; (window.main.database_view.query.current.page as Layouts.Views.Query).export_button.sensitive = false; } window.main.database_view.structure.reset.begin (); window.main.database_view.structure.table_name = ""; window.main.database_view.content.reset.begin (); window.main.database_view.content.table_name = ""; window.main.database_view.relations.reset.begin (); window.main.database_view.relations.table_name = ""; window.main.connection_closed (); window.data_manager.data = null; window.main.database_schema.hide_database_panel (); } private void action_new_window () { app.new_window (); } private void action_new_connection () { if (window.main.connection_manager != null) { return; } window.data_manager.data = null; if (window.connection_dialog == null) { window.connection_dialog = new Sequeler.Widgets.ConnectionDialog (window); window.connection_dialog.show_all (); window.connection_dialog.destroy.connect (() => { window.connection_dialog = null; }); } window.connection_dialog.present (); } private void action_run_query () { if (window.main.connection_manager == null) { return; } var page = (window.main.database_view.query.current.page as Layouts.Views.Query); var query = page.get_text ().strip (); if (query == "") { return; } page.run_query (query); } public static void action_from_group (string action_name, ActionGroup? action_group) { action_group.activate_action (action_name, null); } public void set_default_zoom () { Sequeler.settings.font = get_current_font () + " " + get_default_font_size ().to_string (); (window.main.database_view.query.current.page as Layouts.Views.Query).update_font_style (); } // Ctrl + scroll public void action_zoom_in () { zooming (Gdk.ScrollDirection.UP); } // Ctrl + scroll public void action_zoom_out () { zooming (Gdk.ScrollDirection.DOWN); } private void zooming (Gdk.ScrollDirection direction) { string font = get_current_font (); int font_size = (int) get_current_font_size (); if (Sequeler.settings.use_system_font) { Sequeler.settings.use_system_font = false; font = get_default_font (); font_size = (int) get_default_font_size (); } if (direction == Gdk.ScrollDirection.DOWN) { font_size --; if (font_size < FONT_SIZE_MIN) { return; } } else if (direction == Gdk.ScrollDirection.UP) { font_size ++; if (font_size > FONT_SIZE_MAX) { return; } } string new_font = font + " " + font_size.to_string (); Sequeler.settings.font = new_font; (window.main.database_view.query.current.page as Layouts.Views.Query).update_font_style (); } public string get_current_font () { string font = Sequeler.settings.font; string font_family = font.substring (0, font.last_index_of (" ")); return font_family; } public double get_current_font_size () { string font = Sequeler.settings.font; string font_size = font.substring (font.last_index_of (" ") + 1); return double.parse (font_size); } public string get_default_font () { string font = (window.main.database_view.query.current.page as Layouts.Views.Query).default_font; string font_family = font.substring (0, font.last_index_of (" ")); return font_family; } public double get_default_font_size () { string font = (window.main.database_view.query.current.page as Layouts.Views.Query).default_font; string font_size = font.substring (font.last_index_of (" ") + 1); return double.parse (font_size); } // Actions functions private void action_set_default_zoom () { set_default_zoom (); } // Show the Database Panel. private void action_new_db () { window.main.database_schema.show_database_panel (); } // Show the Database Panel to edit the currently selected database. private void action_edit_db () { window.main.database_schema.edit_database_name (); } // Ask confirmation to the user before deleting the database. private void action_delete_db () { var dialog = new Granite.MessageDialog.with_image_from_icon_name (_("Are you sure you want to delete this Database?"), _("All the tables and data will be deleted and you won’t be able to recover it."), "dialog-warning", Gtk.ButtonsType.CANCEL); dialog.transient_for = window; var suggested_button = new Gtk.Button.with_label (_("Yes, Delete!")); suggested_button.get_style_context ().add_class (Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION); dialog.add_action_widget (suggested_button, Gtk.ResponseType.ACCEPT); dialog.show_all (); if (dialog.run () == Gtk.ResponseType.ACCEPT) { window.main.database_schema.delete_database.begin (); } dialog.destroy (); } } ellie-commons-sequeler-9963fb4/src/Services/ConnectionManager.vala000066400000000000000000000512071512323162700252700ustar00rootroot00000000000000/* * Copyright (c) 2011-2019 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Services.ConnectionManager : Object { public weak Sequeler.Window window { get; construct; } public Gee.HashMap data { get; construct; } private Object _db_type; public signal void ssh_tunnel_ready (); public signal void query_error (string error); public Object db_type { get { return _db_type; } set { _db_type = value; } } public Gda.Connection? connection { get; set; default = null; } public Gda.DataModel? output_select; public SSH2.Session session; int sock; int listensock; int forwardsock; bool ssh_tunnel_alive = false; [Flags] enum Auth { NONE, PASSWORD, PUBLICKEY } public ConnectionManager (Sequeler.Window window, Gee.HashMap data) { Object ( window: window, data: data ); } construct { switch (data["type"]) { case "MySQL": db_type = new Sequeler.Services.Types.MySQL (); break; case "MariaDB": db_type = new Sequeler.Services.Types.MySQL (); break; case "PostgreSQL": db_type = new Sequeler.Services.Types.PostgreSQL (); break; case "SQLite": db_type = new Sequeler.Services.Types.SQLite (); break; } fetch_password (); } public void fetch_password () { if (data["password"] == null) { data["password"] = ""; var loop = new MainLoop (); password_mngr.get_password_async.begin (data["id"], (obj, res) => { try { data["password"] = password_mngr.get_password_async.end (res); } catch (Error e) { debug ("Unable to get the password from libsecret"); } loop.quit (); }); loop.run (); } if (data["has_ssh"] == "true") { data["ssh_password"] = ""; var ssh_loop = new MainLoop (); password_mngr.get_password_async.begin (data["id"] + "9999", (obj, res) => { try { data["ssh_password"] = password_mngr.get_password_async.end (res); } catch (Error e) { debug ("Unable to get the SSH password from libsecret"); } ssh_loop.quit (); }); ssh_loop.run (); } } public void test () throws Error { if (data["password"] == null) { fetch_password (); } var connection_string = (db_type as DataBaseType).connection_string (data); debug ("connection string %s", connection_string); try { connection = Gda.Connection.open_from_string (null, connection_string, null, Gda.ConnectionOptions.NONE); } catch (Error e) { throw e; } if (connection.is_opened ()) { connection.close (); } } public void open () throws Error { if (data["password"] == null) { fetch_password (); } var connection_string = (db_type as DataBaseType).connection_string (data); debug ("connection string %s", connection_string); try { connection = Gda.Connection.open_from_string (null, connection_string, null, Gda.ConnectionOptions.NONE); } catch (Error e) { throw e; } debug ("open ends"); } public void ssh_tunnel_init (bool is_real) throws Error { try { ssh_tunnel_open (is_real); } catch (Error e) { debug (e.message); throw e; } } private void ssh_tunnel_open (bool is_real) throws Error { debug ("Opening tunnel %p", Thread.self ()); ssh_tunnel_alive = true; Quark q = Quark.from_string ("ssh-error-str"); var home_dir = Environment.get_home_dir (); // private key file var keyfile2 = home_dir + "/.ssh/id_rsa"; if (data.has_key ("ssh_identity_file") && data["ssh_identity_file"] != "") { keyfile2 = data["ssh_identity_file"]; } // public key file var keyfile1 = home_dir + "/.ssh/id_rsa.pub"; if (data.has_key ("ssh_pubkey_file") && data["ssh_pubkey_file"] != "") { keyfile1 = data["ssh_pubkey_file"]; } // SSH credentials if password authentication is required var username = data["ssh_username"]; var password = data["ssh_password"]; // SSH HOST address and Port var server_ip = data["ssh_host"]; var server_port = data["ssh_port"] != "" ? (uint16) int.parse (data["ssh_port"]) : 22; // The IP address where the DB is available on your SSH var local_listenip = "127.0.0.1"; // The Port used by the DB on your SSH host uint16 local_listenport = 9000; // Default vars for TCPIP Tunnelling var remote_desthost = data["host"] != "" ? data["host"] : "127.0.0.1"; var remote_destport = data["port"] != "" ? int.parse (data["port"]) : 3306; var rc = SSH2.init (0); if (rc != SSH2.Error.NONE) { debug ("libssh2 initialization failed (%d)", rc); throw new Error.literal (q, 1, _("Libssh2 initialization failed (%d)").printf (rc)); } debug ("Socket params: %s %d", server_ip, server_port); /* Connect to SSH server */ sock = Posix.socket (Posix.AF_INET, Posix.SOCK_STREAM, Posix.IPProto.TCP); if (sock == -1) { debug ("Failed to open socket"); throw new Error.literal (q, 1, _("Failed to open socket")); } Posix.SockAddrIn sin = Posix.SockAddrIn (); sin.sin_family = Posix.AF_INET; sin.sin_addr.s_addr = Posix.inet_addr (server_ip); sin.sin_port = Posix.htons (server_port); if (Posix.connect (sock, &sin, sizeof (Posix.SockAddrIn)) != 0) { debug ("Failed to connect!"); throw new Error.literal (q, 1, _("Failed to connect!")); } /* Create a session instance */ session = SSH2.Session.create (); /* …start it up. This will trade welcome banners, exchange keys, * and setup crypto, compression, and MAC layers */ rc = session.handshake (sock); if (rc != SSH2.Error.NONE) { debug ("Error when starting up SSH session: %d", rc); throw new Error.literal (q, 1, _("Error when starting up SSH session: %d").printf (rc)); } /* check what authentication methods are available */ int auth_pw = 0; var userauthlist = session.list_authentication (username.data); debug ("Authentication methods: %s", userauthlist); if ("password" in userauthlist) { auth_pw |= Auth.PASSWORD; } if ("publickey" in userauthlist) { auth_pw |= Auth.PUBLICKEY; } if ((auth_pw & Auth.PASSWORD) != 0) { if (session.auth_password (username, password) != SSH2.Error.NONE) { debug ("Authentication by password failed."); ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); throw new Error.literal (q, 1, _("Authentication by password failed!")); } } else if ((auth_pw & Auth.PUBLICKEY) != 0) { if (session.auth_publickey_from_file (username, keyfile1, keyfile2, password ) != SSH2.Error.NONE) { debug ("Authentication by public key failed!"); ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); throw new Error.literal (q, 1, _("Authentication by public key failed!")); } debug ("Authentication by public key succeeded."); } else { debug ("No supported authentication methods found!"); ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); throw new Error.literal (q, 1, _("No supported authentication methods found!")); } listensock = Posix.socket (Posix.AF_INET, Posix.SOCK_STREAM, Posix.IPProto.TCP); if (listensock == -1) { debug ("failed to open listen socket"); ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); throw new Error.literal (q, 1, _("Failed to open listen socket")); } debug ("listensock %d", listensock); sin = Posix.SockAddrIn (); sin.sin_family = Posix.AF_INET; sin.sin_addr.s_addr = Posix.inet_addr (local_listenip); sin.sin_port = Posix.htons (local_listenport); var sockopt = 1; Posix.setsockopt (listensock, Linux.Socket.SOL_SOCKET, Linux.Socket.SO_REUSEADDR, &sockopt, (Posix.socklen_t) sizeof (int)); if (Posix.bind (listensock, &sin, sizeof (Posix.SockAddrIn)) == -1) { debug ("Failed to bind!"); ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); throw new Error.literal (q, 1, _("Failed to bind. Your Database Port may be wrong!")); } if (Posix.listen (listensock, 2) == -1) { debug ("Failed to listen!"); ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); throw new Error.literal (q, 1, _("Failed to listen!")); } debug ("Waiting for TCP connection on %s:%d…", local_listenip, local_listenport); bool signal_launched = false; while (ssh_tunnel_alive) { if (!signal_launched) { signal_launched = true; ssh_tunnel_ready (); } else { if (!is_real) { ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); return; } } debug ("Waiting for remote connection %p", Thread.self ()); forwardsock = Posix.accept (listensock, null, null); debug ("forwardsock %d", forwardsock); if (forwardsock == -1) { debug ("Failed to accept!"); ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); throw new Error.literal (q, 1, _("Failed to accept remote connection!")); } debug ("Forwarding connection from %s:%d here to remote %s:%d", local_listenip, local_listenport, remote_desthost, remote_destport); var channel = session.direct_tcpip (remote_desthost, remote_destport, local_listenip, local_listenport); if (channel == null) { debug ("Could not open the direct-tcpip channel! (Note that this can be a problem at the server! Please review the server logs.)"); ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); throw new Error.literal (q, 1, _("Could not open the direct-tcpip channel! (Note that this can be a problem at the server! Please review the server logs.)")); } session.blocking = false; uint8[] buf = new uint8[16384]; while (ssh_tunnel_alive) { Posix.fd_set fds; Posix.FD_ZERO (out fds); Posix.FD_SET (forwardsock, ref fds); Posix.timeval tv = {0, 100000}; var res = Posix.select (forwardsock + 1, &fds, null, null, tv); if (-1 == res) { debug ("Error on select!"); if (is_real) { ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); } // direct_shutdown (); break; } if (res > 0 && Posix.FD_ISSET (forwardsock, fds) > 0) { var len = Posix.recv (forwardsock, buf, 16384, 0); if (len < 0) { debug ("Error reading from the forwardsock!"); ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); break; } else if (0 == len) { debug ("The client at %s:%d disconnected!", local_listenip, local_listenport); debug ("connection manager %p", this); if (is_real) { direct_shutdown (); } break; } ssize_t wr = 0; ssize_t i = 0; do { i = channel.write (buf[wr:len]); if (i < 0) { debug ("Error writing on the SSH channel: %s", i.to_string ()); ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); // direct_shutdown (); break; } wr += i; } while (i > 0 && wr < len); } while (ssh_tunnel_alive) { ssize_t len = channel.read (buf); if (SSH2.Error.AGAIN == len) break; else if (len < 0) { debug ("Error reading from the SSH channel: %d", (int) len); ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); // direct_shutdown (); break; } ssize_t wr = 0; while (wr < len) { ssize_t i = Posix.send (forwardsock, buf[wr:buf.length], len - wr, 0); if (i <= 0) { debug ("Error writing on the forwardsock!"); ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); // direct_shutdown (); break; } wr += i; } if (channel.eof () != SSH2.Error.NONE) { debug ("The remote client at %s:%d disconnected!", remote_desthost, remote_destport); if (is_real) { ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); // direct_shutdown (); } break; } } } } } public void ssh_tunnel_close (string from = "Unknown") { debug ("closing ssh tunnel from: %s %p", from, Thread.self ()); ssh_tunnel_alive = false; // debug ("closing listensock: %d", listensock); Posix.close (listensock); listensock = -1; // debug ("listensock closed: %d", listensock); // debug ("closing forwardsock: %d", forwardsock); Posix.close (forwardsock); forwardsock = -1; // debug ("forwardsock closed: %d", forwardsock); if (session != null) { session.disconnect ("Client disconnecting normally"); session.blocking = false; session = null; } Posix.close (sock); sock = -1; SSH2.exit (); } private void direct_shutdown () { session.blocking = true; Posix.close (forwardsock); forwardsock = -1; } public async int run_query (string query) throws Error requires (connection.is_opened ()) { return connection.execute_non_select_command (query); } public async string run_silent_statement (Gda.Statement statement, Gda.Set? params) throws Error requires (connection.is_opened ()) { var result = connection.statement_execute_non_select (statement, params, null); return result.to_string (); } public Gda.DataModel? run_silent_select_statement (Gda.Statement statement, Gda.Set? params) throws Error requires (connection.is_opened ()) { return connection.statement_execute_select (statement, params); } public Gda.DataModel? run_select (string query) throws Error { return connection.execute_select_command (query); } public async Gee.HashMap init_connection () throws ThreadError { var output = new Gee.HashMap (); output["status"] = "false"; bool result = true; string msg = ""; SourceFunc callback = init_connection.callback; new Thread (null, () => { try { debug ("pass init connection"); open (); } catch (Error e) { result = false; msg = e.message; } Idle.add ((owned) callback); Thread.exit (null); return null; }); yield; output["msg"] = msg; output["status"] = result.to_string (); return output; } public Gda.Statement parse_sql_string (string sql, out Gda.Set @params) throws Error { return connection.parse_sql_string (sql, out params); } public async Gda.DataModel? init_select_query (string query) { Gda.DataModel? result = null; var error = ""; SourceFunc callback = init_select_query.callback; new Thread (null, () => { try { result = run_select (query); } catch (Error e) { error = e.message; result = null; } Idle.add ((owned) callback); Thread.exit (null); return null; }); yield; if (error != "") { query_warning (error); return null; } return result; } public async Gee.HashMap init_silent_select_statement (Gda.Statement statement, Gda.Set? params) { var result = new Gee.HashMap (); Gda.DataModel? data = null; var error = ""; SourceFunc callback = init_silent_select_statement.callback; new Thread (null, () => { try { data = run_silent_select_statement (statement, params); } catch (Error e) { error = e.message; data = null; } Idle.add ((owned) callback); Thread.exit (null); return null; }); yield; result.@set (data, error); return result; } public async int? init_query (string query) { int result = 0; var error = ""; try { result = yield run_query (query); } catch (Error e) { error = e.message; } if (error != "") { query_warning (error); return null; } return result; } public async Gee.HashMap init_silent_statement (Gda.Statement statement, Gda.Set? params) { var result = new Gee.HashMap (); string? data = null; var error = ""; try { data = yield run_silent_statement (statement, params); } catch (Error e) { error = e.message; } if (error != "") { data = null; } result.@set (data, error); return result; } public void query_warning (string message) { var message_dialog = new Granite.MessageDialog.with_image_from_icon_name (_("Error!"), message, "dialog-error", Gtk.ButtonsType.NONE); message_dialog.transient_for = window; var suggested_button = new Gtk.Button.with_label ("Close"); message_dialog.add_action_widget (suggested_button, Gtk.ResponseType.ACCEPT); message_dialog.show_all (); if (message_dialog.run () == Gtk.ResponseType.ACCEPT) {} message_dialog.destroy (); } } ellie-commons-sequeler-9963fb4/src/Services/DataManager.vala000066400000000000000000000020621512323162700240350ustar00rootroot00000000000000/* * Copyright (c) 2011-2018 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Services.DataManager : Object { private Gee.HashMap? _data = null; public Gee.HashMap? data { get { return _data; } set { _data = value; } } } ellie-commons-sequeler-9963fb4/src/Services/PasswordManager.vala000066400000000000000000000057421512323162700247760ustar00rootroot00000000000000/* * Copyright (c) 2011-2018 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Services.PasswordManager : Object { // Store Password Async public async void store_password_async (string id, string password) throws Error { var attributes = new GLib.HashTable (str_hash, str_equal); attributes["id"] = id; attributes["schema"] = Constants.PROJECT_NAME; var key_name = Constants.PROJECT_NAME + "." + id; bool result = yield Secret.password_storev (schema, attributes, Secret.COLLECTION_DEFAULT, key_name, password, null); if (! result) { debug ("Unable to store password for \"%s\" in libsecret keyring", key_name); } } // Get Password Async public async string? get_password_async (string id) throws Error { var attributes = new GLib.HashTable (str_hash, str_equal); attributes["id"] = id; attributes["schema"] = Constants.PROJECT_NAME; var key_name = Constants.PROJECT_NAME + "." + id; string? password = yield Secret.password_lookupv (schema, attributes, null); if (password == null) { debug ("Unable to fetch password in libsecret keyring for %s", key_name); } return password; } // Delete Password Async public async void clear_password_async (string id) throws Error { var attributes = new GLib.HashTable (str_hash, str_equal); attributes["id"] = id; attributes["schema"] = Constants.PROJECT_NAME; var key_name = Constants.PROJECT_NAME + "." + id; bool removed = yield Secret.password_clearv (schema, attributes, null); if (! removed) { debug ("Unable to clear password in libsecret keyring for %s", key_name); } } // Delete All Passwords public async void clear_all_passwords_async () throws Error { var attributes = new GLib.HashTable (str_hash, str_equal); attributes["schema"] = Constants.PROJECT_NAME; bool removed = yield Secret.password_clearv (schema, attributes, null); if (! removed) { debug ("Unable to clear all passwords in libsecret"); } } } ellie-commons-sequeler-9963fb4/src/Services/Settings.vala000066400000000000000000000166201512323162700234760ustar00rootroot00000000000000/* * Copyright (c) 2017-2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Services.Settings : GLib.Settings { public int pos_x { get { return get_int ("pos-x"); } set { set_int ("pos-x", value); } } public int pos_y { get { return get_int ("pos-y"); } set { set_int ("pos-y", value); } } public int window_width { get { return get_int ("window-width"); } set { set_int ("window-width", value); } } public int window_height { get { return get_int ("window-height"); } set { set_int ("window-height", value); } } public int sidebar_width { get { return get_int ("sidebar-width"); } set { set_int ("sidebar-width", value); } } public string[] saved_connections { owned get { return get_strv ("saved-connections"); } set { set_strv ("saved-connections", value); } } public int tot_connections { get { return get_int ("tot-connections"); } set { set_int ("tot-connections", value); } } public int limit_results { get { return get_int ("limit-results"); } set { set_int ("limit-results", value); } } public bool save_quick { get { return get_boolean ("save-quick"); } set { set_boolean ("save-quick", value); } } public string version { owned get { return get_string ("version"); } set { set_string ("version", value); } } public bool use_system_font { get { return get_boolean ("use-system-font"); } set { set_boolean ("use-system-font", value); } } public string font { owned get { return get_string ("font"); } set { set_string ("font", value); } } public string style_scheme { owned get { return get_string ("style-scheme"); } set { set_string ("style-scheme", value); } } public int query_area { get { return get_int ("query-area"); } set { set_int ("query-area", value); } } public Settings () { Object (schema_id: Constants.PROJECT_NAME); } public void add_connection (Gee.HashMap data) { if (data["type"] != "SQLite") { update_password.begin (data); data.unset ("password"); data.unset ("ssh_password"); } var conns = get_strv ("saved-connections"); conns += stringify_data (data); set_strv ("saved-connections", conns); tot_connections = tot_connections + 1; } public async void duplicate_connection (Gee.HashMap data) { data["id"] = tot_connections.to_string (); data["title"] = _("%s (copy)").printf (data["title"]); add_connection (data); } public void edit_connection (Gee.HashMap new_data, string old_data) { var position = 0; Gee.List existing_connections = new Gee.ArrayList (); existing_connections.add_all_array (saved_connections); if (existing_connections.contains (old_data)) { position = existing_connections.index_of (old_data); existing_connections.remove (old_data); } if (new_data["type"] != "SQLite") { update_password.begin (new_data); new_data.unset ("password"); if (new_data["has_ssh"] == "true" && new_data["ssh_password"] != null) { update_ssh_password.begin (new_data); new_data.unset ("ssh_password"); } } existing_connections.insert (position, stringify_data (new_data)); string[] new_conns = {}; foreach (var conn in existing_connections.to_array ()) { new_conns += conn; } set_strv ("saved-connections", new_conns); } public void delete_connection (Gee.HashMap data) { string[] new_conns = {}; var conns = get_strv ("saved-connections"); if (data["type"] != "SQLite") { delete_password.begin (data); } foreach (var conn in conns) { var check = arraify_data (conn); if (check["id"] == data["id"]) { continue; } new_conns += conn; } set_strv ("saved-connections", new_conns); } public void clear_connections () { string[] empty = {}; set_strv ("saved-connections", empty); tot_connections = 0; delete_all_passwords.begin (); } public void reorder_connection (Gee.HashMap source, int position) { Gee.ArrayList existing_connections = new Gee.ArrayList (); existing_connections.add_all_array (saved_connections); foreach (var conn in saved_connections) { var check = arraify_data (conn); if (check["id"] == source["id"]) { existing_connections.remove (conn); } } existing_connections.insert (position, stringify_data (source)); string[] new_conns = {}; foreach (var conn in existing_connections.to_array ()) { new_conns += conn; } set_strv ("saved-connections", new_conns); } public string stringify_data (Gee.HashMap data) { string result = ""; foreach (var entry in data.entries) { string values = "%s=%s\n".printf (entry.key, entry.value); result = result + values; } return result; } public Gee.HashMap arraify_data (string connection) { var array = new Gee.HashMap (); var data = connection.split ("\n"); foreach (var d in data) { var d2 = d.split ("=", 2); if (d2[0] == null) { continue; } array.set (d2[0], d2[1]); } return array; } public async void update_password (Gee.HashMap data) throws Error { yield password_mngr.store_password_async (data["id"], data["password"]); } public async void update_ssh_password (Gee.HashMap data) throws Error { yield password_mngr.store_password_async (data["id"] + "9999", data["ssh_password"]); } public async void delete_password (Gee.HashMap data) throws Error { yield password_mngr.clear_password_async (data["id"]); if (data["has_ssh"] == "true" && data["ssh_password"] != null) { yield password_mngr.clear_password_async (data["id"] + "9999"); } } public async void delete_all_passwords () throws Error { yield password_mngr.clear_all_passwords_async (); } } ellie-commons-sequeler-9963fb4/src/Services/Types/000077500000000000000000000000001512323162700221305ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/src/Services/Types/DataBaseType.vala000066400000000000000000000043351512323162700253100ustar00rootroot00000000000000/* * Copyright (c) 2011-2018 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public interface DataBaseType : Object { /* * Connect to the database */ public abstract string connection_string (Gee.HashMap data); /* * Populate dropdown database selection */ public abstract string show_schema (); /* * Populate sidebar with table list */ public abstract string show_table_list (string name); /* * Update table name */ public abstract string edit_table_name (string old_table, string new_table); /* * Transfer a table from a Database to another */ public abstract string transfer_table (string old_database, string table, string new_database); /* * Show table structure */ public abstract string show_table_structure (string table, string? sortby = null, string sort = "ASC"); /* * Show table content */ public abstract string show_table_content ( string table, int? count = null, int? page = null, string? sortby = null, string sort = "ASC" ); /* * Show table relations */ public abstract string show_table_relations ( string table, string? database, string? sortby = null, string sort = "ASC" ); /* * Create database */ public abstract string create_database (string name); /* * Delete database */ public abstract string delete_database (string name); } ellie-commons-sequeler-9963fb4/src/Services/Types/MySQL.vala000066400000000000000000000102051512323162700237400ustar00rootroot00000000000000/* * Copyright (c) 2011-2019 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Services.Types.MySQL : Object, DataBaseType { public string port { set; get; default = "3306"; } public string host { set; get; default = "127.0.0.1"; } public string connection_string (Gee.HashMap data) { var username = Gda.rfc1738_encode (data["username"]); var password = Gda.rfc1738_encode (data["password"]); var use_ssl = Gda.rfc1738_encode (data["use_ssl"] ?? "false"); var name = Gda.rfc1738_encode (data["name"]); if (data["has_ssh"] == "true") { port = "9000"; host = "127.0.0.1"; } else { port = data["port"] != "" ? data["port"] : port; host = data["host"] != "" ? Gda.rfc1738_encode (data["host"]) : host; } return "MySQL://" + username + ":" + password + "@DB_NAME=" + name + ";HOST=" + host + ";PORT=" + port + ";USE_SSL=" + use_ssl; } public string show_schema () { return "SHOW SCHEMAS"; } public string show_table_list (string name) { return "SELECT table_name, table_rows FROM information_schema.TABLES WHERE TABLE_SCHEMA = '%s' ORDER BY table_name ASC".printf (name); } public string edit_table_name (string old_table, string new_table) { return "RENAME TABLE %s TO %s".printf (old_table, new_table); } public string transfer_table (string old_database, string table, string new_database) { return "RENAME TABLE %s.%s TO %s.%s".printf (old_database, table, new_database, table); } public string show_table_structure (string table, string? sortby = null, string sort = "ASC") { var output = "SELECT COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, COLUMN_COMMENT FROM information_schema.COLUMNS WHERE table_name = '%s' AND table_schema = DATABASE()".printf (table); if (sortby != null) { output += " ORDER BY %s %s".printf (sortby, sort); } return output; } public string show_table_content ( string table, int? count = null, int? page = null, string? sortby = null, string sort = "ASC" ) { var output = "SELECT * FROM %s".printf (table); if (sortby != null) { output += " ORDER BY %s %s".printf (sortby, sort); } if (count != null && count > settings.limit_results) { output += " LIMIT %i".printf (settings.limit_results); } if (page != null && page > 1) { output += " OFFSET %i".printf (settings.limit_results * (page - 1)); } return output; } public string show_table_relations ( string table, string? database, string? sortby = null, string sort = "ASC" ) { var output = "SELECT COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_COLUMN_NAME, REFERENCED_TABLE_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_NAME = '%s' AND TABLE_SCHEMA = '%s'".printf (table, database); if (sortby != null) { output += " ORDER BY %s %s".printf (sortby, sort); } return output; } public string create_database (string name) { return "CREATE DATABASE %s".printf (name); } public string delete_database (string name) { return "DROP DATABASE %s".printf (name); } } ellie-commons-sequeler-9963fb4/src/Services/Types/PostgreSQL.vala000066400000000000000000000107241512323162700250040ustar00rootroot00000000000000/* * Copyright (c) 2011-2019 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Services.Types.PostgreSQL : Object, DataBaseType { public string port { set; get; default = "5432"; } public string host { set; get; default = "127.0.0.1"; } public string connection_string (Gee.HashMap data) { var username = Gda.rfc1738_encode (data["username"]); var password = Gda.rfc1738_encode (data["password"]); var use_ssl = Gda.rfc1738_encode (data["use_ssl"] ?? "false"); var name = Gda.rfc1738_encode (data["name"]); host = data["host"] != "" ? Gda.rfc1738_encode (data["host"]) : host; if (data["has_ssh"] == "true") { port = "9000"; } else { port = data["port"] != "" ? data["port"] : port; } return "PostgreSQL://" + username + ":" + password + "@DB_NAME=" + name + ";HOST=" + host + ";PORT=" + port + ";USE_SSL=" + use_ssl; } public string show_schema () { return "SELECT schema_name FROM information_schema.schemata"; } public string show_table_list (string name) { return "SELECT relname, reltuples FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND relkind='r' ORDER BY relname ASC;"; } public string edit_table_name (string old_table, string new_table) { return "ALTER TABLE \"%s\" RENAME TO \"%s\"".printf (old_table, new_table); } public string transfer_table (string old_database, string table, string new_database) { return ""; } public string show_table_structure (string table, string? sortby = null, string sort = "ASC") { var output = "SELECT * FROM information_schema.COLUMNS WHERE table_name='%s'".printf (table); if (sortby != null) { output += " ORDER BY %s %s".printf (sortby, sort); } return output; } public string show_table_content ( string table, int? count = null, int? page = null, string? sortby = null, string sort = "ASC" ) { var output = "SELECT * FROM \"%s\"".printf (table); if (sortby != null) { output += " ORDER BY \"%s\" %s".printf (sortby, sort); } if (count != null && count > settings.limit_results) { output += " LIMIT %i".printf (settings.limit_results); } if (page != null && page > 1) { output += " OFFSET %i".printf (settings.limit_results * (page - 1)); } return output; } public string show_table_relations ( string table, string? database, string? sortby = null, string sort = "ASC" ) { var output = "SELECT ccu.column_name as \"COLUMN_NAME\", tc.constraint_name as \"CONSTRAINT_NAME\", kcu.column_name as \"REFERENCED_COLUMN_NAME\", tc.table_name as \"REFERENCED_TABLE\" FROM information_schema.table_constraints tc JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name WHERE constraint_type = 'FOREIGN KEY' AND ccu.table_name='%s' AND ccu.table_schema = '%s'".printf (table, database); if (sortby != null) { output += " ORDER BY \"%s\" %s".printf (sortby, sort); } return output; } public string create_database (string name) { // Temporary placeholder methods. No current support for database // operations in PostgreSQL. return ""; } public string delete_database (string name) { // Temporary placeholder methods. No current support for database // operations in PostgreSQL. return ""; } } ellie-commons-sequeler-9963fb4/src/Services/Types/SQLite.vala000066400000000000000000000064021512323162700241400ustar00rootroot00000000000000/* * Copyright (c) 2011-2019 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Services.Types.SQLite : Object, DataBaseType { public string connection_string (Gee.HashMap data) { var file_path = data["file_path"].replace ("file://", ""); var last_slash = file_path.last_index_of ("/", 0) + 1; var dir = Gda.rfc1738_encode (file_path.substring (0, last_slash)); var name = Gda.rfc1738_encode (file_path.substring (last_slash, -1)); return "SQLite://DB_DIR=" + dir + ";DB_NAME=" + name; } public string show_schema () { return "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;"; } public string show_table_list (string name) { return "SELECT COUNT(*) FROM %s".printf (name); } public string edit_table_name (string old_table, string new_table) { return "ALTER TABLE %s RENAME TO %s".printf (old_table, new_table); } public string transfer_table (string old_database, string table, string new_database) { // Temporary placeholder methods. No current support for database // operations in SQLite. return ""; } public string show_table_structure (string table, string? sortby = null, string sort = "ASC") { return "PRAGMA table_info('%s')".printf (table); } public string show_table_content ( string table, int? count = null, int? page = null, string? sortby = null, string sort = "ASC" ) { var output = "SELECT * FROM %s".printf (table); if (sortby != null) { output += " ORDER BY `%s` %s".printf (sortby, sort); } if (count != null && count > settings.limit_results) { output += " LIMIT %i".printf (settings.limit_results); } if (page != null && page > 1) { output += " OFFSET %i".printf (settings.limit_results * (page - 1)); } return output; } public string show_table_relations ( string table, string? database, string? sortby = null, string sort = "ASC" ) { return "PRAGMA foreign_key_list('%s')".printf (table); } public string create_database (string name) { // Temporary placeholder methods. No current support for database // operations in SQLite. return ""; } public string delete_database (string name) { // Temporary placeholder methods. No current support for database // operations in SQLite. return ""; } } ellie-commons-sequeler-9963fb4/src/Services/UpgradeManager.vala000066400000000000000000000037521512323162700245620ustar00rootroot00000000000000/* * Copyright (c) 2011-2018 Alecaddd (http://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Services.UpgradeManager : Object { construct { string version = settings.version; switch (version) { case "": upgrade_passwords_to_libsecret.begin (); case Constants.VERSION: debug ("Current Version"); } settings.version = Constants.VERSION; } public virtual async void upgrade_passwords_to_libsecret () throws Error { var current_connections = settings.saved_connections; Gee.List existing_connections = new Gee.ArrayList (); existing_connections.add_all_array (current_connections); foreach (var conn in settings.saved_connections) { var check = settings.arraify_data (conn); if (check["type"] != "SQLite" && check.has_key ("password")) { settings.update_password.begin (check); check.unset ("password"); existing_connections.remove (conn); existing_connections.insert (0, settings.stringify_data (check)); } } settings.saved_connections = existing_connections.to_array (); } } ellie-commons-sequeler-9963fb4/src/Widgets/000077500000000000000000000000001512323162700206475ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/src/Widgets/ConnectionDialog.vala000066400000000000000000000756421512323162700247510ustar00rootroot00000000000000/* * Copyright (c) 2017-2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Widgets.ConnectionDialog : Gtk.Dialog { public weak Sequeler.Window window { get; construct; } private Sequeler.Services.ConnectionManager? connection_manager { get; set; default = null; } public Sequeler.Partials.ButtonClass test_button; public Sequeler.Partials.ButtonClass connect_button; public Sequeler.Partials.ButtonClass cancel_button; public Sequeler.Partials.ButtonClass save_button; private Gtk.Label header_title; private Gtk.ColorButton color_picker; private Gtk.InfoBar infobar; private Gtk.Label infobar_label; private string infobar_label_missing_private_key = _("Missing SSH Key file!"); private string infobar_label_missing_public_key = _("Missing SSH public key!"); private Sequeler.Partials.LabelForm db_file_label; private Sequeler.Partials.LabelForm db_host_label; private Sequeler.Partials.LabelForm db_name_label; private Sequeler.Partials.LabelForm db_username_label; private Sequeler.Partials.LabelForm db_password_label; private Sequeler.Partials.LabelForm db_port_label; private Gtk.Entry connection_id; private Sequeler.Partials.Entry title_entry; private Gee.HashMap db_types; private Gtk.ComboBox db_type_entry; private Sequeler.Partials.Entry db_host_entry; private Sequeler.Partials.Entry db_name_entry; private Sequeler.Partials.Entry db_username_entry; private Sequeler.Partials.Entry db_password_entry; private Sequeler.Partials.Entry db_port_entry; private Gtk.FileChooserButton db_file_entry; private string keyfile1; private string keyfile2; private Sequeler.Partials.LabelForm ssl_switch_label; private Gtk.Grid ssl_switch_container; private Gtk.Switch ssl_switch; private Sequeler.Partials.LabelForm ssh_switch_label; private Gtk.Grid ssh_switch_container; private Gtk.Switch ssh_switch; private Sequeler.Partials.LabelForm ssh_host_label; private Sequeler.Partials.Entry ssh_host_entry; private Sequeler.Partials.LabelForm ssh_username_label; private Sequeler.Partials.Entry ssh_username_entry; private Sequeler.Partials.LabelForm ssh_password_label; private Sequeler.Partials.Entry ssh_password_entry; private Sequeler.Partials.LabelForm ssh_port_label; private Sequeler.Partials.Entry ssh_port_entry; private Sequeler.Partials.LabelForm ssh_identity_file_label; private Gtk.FileChooserButton ssh_identity_file_entry; private Sequeler.Partials.LabelForm ssh_pubkey_file_label; private Gtk.FileChooserButton ssh_pubkey_file_entry; private Gtk.Spinner spinner; private Sequeler.Partials.ResponseMessage response_msg; enum Column { DBTYPE } enum Action { TEST, SAVE, CANCEL, CONNECT } public ConnectionDialog (Sequeler.Window? parent) { Object ( border_width: 5, deletable: false, resizable: false, title: _("Connection"), transient_for: parent, window: parent ); } construct { set_id (); build_content (); toggle_ssh_fields (false); build_actions (); populate_data.begin (); change_sensitivity (); response.connect (on_response); } private void set_id () { var id = settings.tot_connections; connection_id = new Gtk.Entry (); connection_id.text = id.to_string (); } private void build_content () { var body = get_content_area (); db_types = new Gee.HashMap (); db_types.set (0, "MySQL"); db_types.set (1, "MariaDB"); db_types.set (2, "PostgreSQL"); db_types.set (3, "SQLite"); var header_grid = new Gtk.Grid (); header_grid.margin_start = 30; header_grid.margin_end = 30; header_grid.margin_bottom = 10; var image = new Gtk.Image.from_icon_name ("office-database", Gtk.IconSize.DIALOG); image.margin_end = 10; header_title = new Gtk.Label (_("New Connection")); header_title.get_style_context ().add_class (Granite.STYLE_CLASS_H2_LABEL); header_title.halign = Gtk.Align.START; header_title.ellipsize = Pango.EllipsizeMode.END; header_title.margin_end = 10; header_title.set_line_wrap (true); header_title.hexpand = true; color_picker = new Gtk.ColorButton.with_rgba ({ 222, 222, 222, 255 }); color_picker.get_style_context ().add_class ("color-picker"); color_picker.can_focus = false; color_picker.set_tooltip_text (_("Select connection color")); header_grid.attach (image, 0, 0, 1, 2); header_grid.attach (header_title, 1, 0, 1, 2); header_grid.attach (color_picker, 2, 0, 1, 1); body.add (header_grid); var form_grid = new Gtk.Grid (); form_grid.margin = 30; form_grid.row_spacing = 12; form_grid.column_spacing = 20; var ssh_grid = new Gtk.Grid (); ssh_grid.margin = 30; ssh_grid.row_spacing = 12; ssh_grid.column_spacing = 20; var ssh_switch_grid = new Gtk.Grid (); ssh_switch_grid.halign = Gtk.Align.CENTER; ssh_switch_grid.column_spacing = 20; ssh_switch_grid.margin_bottom = 12; var title_label = new Sequeler.Partials.LabelForm (_("Connection Name:")); title_entry = new Sequeler.Partials.Entry (_("Connection's name"), _("New Connection")); title_entry.changed.connect (() => { header_title.label = title_entry.text; }); form_grid.attach (title_label, 0, 0, 1, 1); form_grid.attach (title_entry, 1, 0, 1, 1); var db_type_label = new Sequeler.Partials.LabelForm (_("Database Type:")); var list_store = new Gtk.ListStore (1, typeof (string)); for (int i = 0; i < db_types.size; i++) { Gtk.TreeIter iter; list_store.append (out iter); list_store.set (iter, Column.DBTYPE, db_types[i]); } db_type_entry = new Gtk.ComboBox.with_model (list_store); var cell = new Gtk.CellRendererText (); db_type_entry.pack_start (cell, false); db_type_entry.set_attributes (cell, "text", Column.DBTYPE); db_type_entry.set_active (0); db_type_entry.changed.connect (() => { db_type_changed (); }); form_grid.attach (db_type_label, 0, 1, 1, 1); form_grid.attach (db_type_entry, 1, 1, 1, 1); db_host_label = new Sequeler.Partials.LabelForm (_("Host:")); db_host_entry = new Sequeler.Partials.Entry ("127.0.0.1", null); form_grid.attach (db_host_label, 0, 2, 1, 1); form_grid.attach (db_host_entry, 1, 2, 1, 1); db_name_label = new Sequeler.Partials.LabelForm (_("Database Name:")); db_name_entry = new Sequeler.Partials.Entry ("", null); db_name_entry.changed.connect (change_sensitivity); form_grid.attach (db_name_label, 0, 3, 1, 1); form_grid.attach (db_name_entry, 1, 3, 1, 1); db_username_label = new Sequeler.Partials.LabelForm (_("Username:")); db_username_entry = new Sequeler.Partials.Entry ("", null); form_grid.attach (db_username_label, 0, 4, 1, 1); form_grid.attach (db_username_entry, 1, 4, 1, 1); db_password_label = new Sequeler.Partials.LabelForm (_("Password:")); db_password_entry = new Sequeler.Partials.Entry ("", null); db_password_entry.visibility = false; db_password_entry.set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "changes-prevent-symbolic"); db_password_entry.set_icon_tooltip_text (Gtk.EntryIconPosition.SECONDARY, _("Show password")); db_password_entry.icon_press.connect ((pos, event) => { if (pos == Gtk.EntryIconPosition.SECONDARY) { db_password_entry.visibility = !db_password_entry.visibility; } if (db_password_entry.visibility) { db_password_entry.set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "changes-allow-symbolic"); db_password_entry.set_icon_tooltip_text (Gtk.EntryIconPosition.SECONDARY, _("Hide password")); } else { db_password_entry.set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "changes-prevent-symbolic"); db_password_entry.set_icon_tooltip_text (Gtk.EntryIconPosition.SECONDARY, _("Show password")); } }); form_grid.attach (db_password_label, 0, 5, 1, 1); form_grid.attach (db_password_entry, 1, 5, 1, 1); db_port_label = new Sequeler.Partials.LabelForm (_("Port:")); db_port_entry = new Sequeler.Partials.Entry ("3306", null); form_grid.attach (db_port_label, 0, 6, 1, 1); form_grid.attach (db_port_entry, 1, 6, 1, 1); ssl_switch_label = new Sequeler.Partials.LabelForm (_("Use SSL:")); ssl_switch = new Gtk.Switch (); ssl_switch_container = new Gtk.Grid (); ssl_switch_container.add (ssl_switch); ssl_switch.set_state (false); form_grid.attach (ssl_switch_label, 0, 7, 1, 1); form_grid.attach (ssl_switch_container, 1, 7, 1, 1); db_file_label = new Sequeler.Partials.LabelForm (_("File Path:")); db_file_entry = new Gtk.FileChooserButton (_("Select Your SQLite File\u2026"), Gtk.FileChooserAction.OPEN); var filter = new Gtk.FileFilter (); filter.set_filter_name ("Database File"); filter.add_pattern ("*.db"); filter.add_pattern ("*.sqlite"); filter.add_pattern ("*.sqlite3"); db_file_entry.add_filter (filter); db_file_entry.selection_changed.connect (change_sensitivity); form_grid.attach (db_file_label, 0, 7, 1, 1); form_grid.attach (db_file_entry, 1, 7, 1, 1); db_file_label.visible = false; db_file_label.no_show_all = true; db_file_entry.visible = false; db_file_entry.no_show_all = true; ssh_switch = new Gtk.Switch (); ssh_switch_container = new Gtk.Grid (); ssh_switch_container.add (ssh_switch); ssh_switch_label = new Sequeler.Partials.LabelForm (_("Connect via SSH Tunnel:")); ssh_switch.notify["active"].connect (() => { toggle_ssh_fields (ssh_switch.get_active ()); }); ssh_switch_grid.attach (ssh_switch_label, 0, 0, 1, 1); ssh_switch_grid.attach (ssh_switch_container, 1, 0, 1, 1); ssh_grid.attach (ssh_switch_grid, 0, 0, 2, 1); ssh_host_label = new Sequeler.Partials.LabelForm (_("SSH Host:")); ssh_host_entry = new Sequeler.Partials.Entry ("", null); ssh_grid.attach (ssh_host_label, 0, 2, 1, 1); ssh_grid.attach (ssh_host_entry, 1, 2, 1, 1); ssh_username_label = new Sequeler.Partials.LabelForm (_("SSH Username:")); ssh_username_entry = new Sequeler.Partials.Entry ("", null); ssh_grid.attach (ssh_username_label, 0, 3, 1, 1); ssh_grid.attach (ssh_username_entry, 1, 3, 1, 1); ssh_password_label = new Sequeler.Partials.LabelForm (_("SSH Password:")); ssh_password_entry = new Sequeler.Partials.Entry ("", null); ssh_password_entry.visibility = false; ssh_password_entry.set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "changes-prevent-symbolic"); ssh_password_entry.set_icon_tooltip_text (Gtk.EntryIconPosition.SECONDARY, _("Show password")); ssh_password_entry.icon_press.connect ((pos, event) => { if (pos == Gtk.EntryIconPosition.SECONDARY) { ssh_password_entry.visibility = !ssh_password_entry.visibility; } if (ssh_password_entry.visibility) { ssh_password_entry.set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "changes-allow-symbolic"); ssh_password_entry.set_icon_tooltip_text (Gtk.EntryIconPosition.SECONDARY, _("Hide password")); } else { ssh_password_entry.set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "changes-prevent-symbolic"); ssh_password_entry.set_icon_tooltip_text (Gtk.EntryIconPosition.SECONDARY, _("Show password")); } }); ssh_grid.attach (ssh_password_label, 0, 4, 1, 1); ssh_grid.attach (ssh_password_entry, 1, 4, 1, 1); ssh_port_label = new Sequeler.Partials.LabelForm (_("SSH Port:")); ssh_port_entry = new Sequeler.Partials.Entry (_("Optional"), null); ssh_grid.attach (ssh_port_label, 0, 5, 1, 1); ssh_grid.attach (ssh_port_entry, 1, 5, 1, 1); ssh_identity_file_label = new Sequeler.Partials.LabelForm (_("SSH Identity")); ssh_identity_file_entry = new Gtk.FileChooserButton ( _("Select Your Identity File\u2026"), Gtk.FileChooserAction.OPEN ); ssh_identity_file_entry.set_filename (this.get_default_ssh_identity_filename ()); ssh_identity_file_entry.file_set.connect (this.verify_ssh_file_entry); ssh_grid.attach (ssh_identity_file_label, 0, 6, 1, 1); ssh_grid.attach (ssh_identity_file_entry, 1, 6, 1, 1); ssh_pubkey_file_label = new Sequeler.Partials.LabelForm (_("SSH Public Key")); ssh_pubkey_file_entry = new Gtk.FileChooserButton ( _("Select Your Public Key File\u2026"), Gtk.FileChooserAction.OPEN ); ssh_pubkey_file_entry.set_filename (this.get_default_ssh_pubkey_filename ()); ssh_pubkey_file_entry.file_set.connect (this.verify_ssh_file_entry); ssh_grid.attach (ssh_pubkey_file_label, 0, 7, 1, 1); ssh_grid.attach (ssh_pubkey_file_entry, 1, 7, 1, 1); infobar_label = new Gtk.Label (infobar_label_missing_private_key); infobar_label.show (); infobar = new Gtk.InfoBar (); infobar.message_type = Gtk.MessageType.WARNING; infobar.get_style_context ().add_class ("inline"); infobar.get_content_area ().add (infobar_label); infobar.show_close_button = false; infobar.add_button (_("Generate SSH Key"), 0); infobar.revealed = false; infobar.response.connect ((response) => { if (response == 0) { try { ssh_switch.active = false; AppInfo.launch_default_for_uri ( "https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/", null ); } catch (Error e) { warning ("%s\n", e.message); } } }); ssh_grid.attach (infobar, 0, 8, 2, 1); var stack_grid = new Gtk.Grid (); stack_grid.expand = true; stack_grid.margin_top = 20; var stackswitcher = new Gtk.StackSwitcher (); stackswitcher.halign = Gtk.Align.CENTER; stack_grid.attach (stackswitcher, 0, 0, 1, 1); var stack = new Gtk.Stack (); stack.expand = true; stackswitcher.stack = stack; stack.add_titled (form_grid, "connection", _("Connection")); stack.add_titled (ssh_grid, "ssh", _("SSH Tunnel")); stack_grid.attach (stack, 0, 1, 1, 1); body.add (stack_grid); spinner = new Gtk.Spinner (); response_msg = new Sequeler.Partials.ResponseMessage (); body.add (spinner); body.add (response_msg); } private string get_default_ssh_identity_filename () { var home_dir = Environment.get_home_dir (); return home_dir + "/.ssh/id_rsa"; } private string get_default_ssh_pubkey_filename () { var identity_filename = get_default_ssh_identity_filename (); return identity_filename + ".pub"; } private void verify_ssh_file_entry () { keyfile2 = ssh_identity_file_entry.get_filename (); keyfile1 = ssh_pubkey_file_entry.get_filename (); var public_key_exists = File.new_for_path (keyfile1).query_exists (); var private_key_exists = File.new_for_path (keyfile2).query_exists (); infobar.revealed = ! private_key_exists || ! public_key_exists; // missing_public_key message is more specific if (! public_key_exists && private_key_exists) { infobar_label.set_text (infobar_label_missing_public_key); } else if (! private_key_exists) { infobar_label.set_text (infobar_label_missing_private_key); } } private void toggle_ssh_fields (bool toggle) { if (toggle) { this.verify_ssh_file_entry (); } else { infobar.revealed = false; } ssh_host_label.visible = toggle; ssh_host_label.no_show_all = !toggle; ssh_host_entry.visible = toggle; ssh_host_entry.no_show_all = !toggle; ssh_username_label.visible = toggle; ssh_username_label.no_show_all = !toggle; ssh_username_entry.visible = toggle; ssh_username_entry.no_show_all = !toggle; ssh_password_label.visible = toggle; ssh_password_label.no_show_all = !toggle; ssh_password_entry.visible = toggle; ssh_password_entry.no_show_all = !toggle; ssh_port_label.visible = toggle; ssh_port_label.no_show_all = !toggle; ssh_port_entry.visible = toggle; ssh_port_entry.no_show_all = !toggle; ssh_identity_file_label.visible = toggle; ssh_identity_file_label.no_show_all = !toggle; ssh_identity_file_entry.visible = toggle; ssh_identity_file_entry.no_show_all = !toggle; ssh_pubkey_file_label.visible = toggle; ssh_pubkey_file_label.no_show_all = !toggle; ssh_pubkey_file_entry.visible = toggle; ssh_pubkey_file_entry.no_show_all = !toggle; } private void build_actions () { cancel_button = new Sequeler.Partials.ButtonClass (_("Close"), null); save_button = new Sequeler.Partials.ButtonClass (_("Save Connection"), null); test_button = new Sequeler.Partials.ButtonClass (_("Test Connection"), null); connect_button = new Sequeler.Partials.ButtonClass (_("Connect"), "suggested-action"); add_action_widget (test_button, Action.TEST); add_action_widget (save_button, Action.SAVE); add_action_widget (cancel_button, Action.CANCEL); add_action_widget (connect_button, Action.CONNECT); } private async void populate_data () { if (window.data_manager.data == null || window.data_manager.data.size == 0) { return; } var update_data = window.data_manager.data; string? old_password = ""; try { old_password = yield password_mngr.get_password_async (update_data["id"]); } catch (Error e) { debug ("Unable to get the password from libsecret"); } connection_id.text = update_data["id"]; title_entry.text = update_data["title"]; var color = Gdk.RGBA (); color.parse (update_data["color"]); color_picker.rgba = color; foreach (var entry in db_types.entries) { if (entry.value == update_data["type"]) { db_type_entry.set_active (entry.key); } } db_host_entry.text = update_data["host"]; db_name_entry.text = update_data["name"]; db_username_entry.text = update_data["username"]; db_password_entry.text = old_password != null ? old_password : ""; if (update_data["file_path"] != null) { db_file_entry.set_uri (update_data["file_path"]); } if (update_data["type"] == "SQLite" && update_data["file_path"] == null) { var update_file_path = update_data["host"] + "/" + update_data["name"] + ".db"; try { db_file_entry.set_file (File.new_for_path (update_file_path)); } catch (Error e) { write_response (e.message); } } if (update_data["port"] != null) { db_port_entry.text = update_data["port"]; } if (update_data["has_ssh"] == "true") { string? old_ssh_password = ""; try { old_ssh_password = yield password_mngr.get_password_async (update_data["id"] + "9999"); } catch (Error e) { debug ("Unable to get the password from libsecret"); } ssh_switch.active = bool.parse (update_data["has_ssh"]); ssh_host_entry.text = (update_data["ssh_host"] != null) ? update_data["ssh_host"] : ""; ssh_username_entry.text = (update_data["ssh_username"] != null) ? update_data["ssh_username"] : ""; ssh_password_entry.text = (old_ssh_password != null) ? old_ssh_password : ""; ssh_port_entry.text = (update_data["ssh_port"] != null) ? update_data["ssh_port"] : ""; if (update_data["ssh_identity_file"] != null) { ssh_identity_file_entry.set_filename (update_data["ssh_identity_file"]); } if (update_data["ssh_pubkey_file"] != null) { ssh_pubkey_file_entry.set_filename (update_data["ssh_pubkey_file"]); } } if (update_data["use_ssl"] != null) { ssl_switch.set_state (update_data["use_ssl"] == "true"); } } private void db_type_changed () { var toggle = db_type_entry.get_active () == 3 ? true : false; toggle_database_info (toggle); change_sensitivity (); if (db_type_entry.get_active () == 2) { db_port_entry.placeholder_text = "5432"; } else { db_port_entry.placeholder_text = "3306"; } } private void toggle_database_info (bool toggle) { db_file_label.visible = toggle; db_file_label.no_show_all = !toggle; db_file_entry.visible = toggle; db_file_entry.no_show_all = !toggle; db_host_label.visible = !toggle; db_host_label.no_show_all = toggle; db_host_entry.visible = !toggle; db_host_entry.no_show_all = toggle; db_name_label.visible = !toggle; db_name_label.no_show_all = toggle; db_name_entry.visible = !toggle; db_name_entry.no_show_all = toggle; db_username_label.visible = !toggle; db_username_label.no_show_all = toggle; db_username_entry.visible = !toggle; db_username_entry.no_show_all = toggle; db_password_label.visible = !toggle; db_password_label.no_show_all = toggle; db_password_entry.visible = !toggle; db_password_entry.no_show_all = toggle; db_port_label.visible = !toggle; db_port_label.no_show_all = toggle; db_port_entry.visible = !toggle; db_port_entry.no_show_all = toggle; ssl_switch_label.visible = !toggle; ssl_switch_label.no_show_all = toggle; ssl_switch.visible = !toggle; ssl_switch.no_show_all = toggle; if (toggle) ssh_switch.active = false; ssh_switch_container.visible = !toggle; ssh_switch_container.no_show_all = toggle; ssh_switch_label.visible = !toggle; ssh_switch_label.no_show_all = toggle; } private void change_sensitivity () { if (db_type_entry.get_active () != 3 || (db_type_entry.get_active () == 3 && db_file_entry.get_uri () != null) ) { test_button.sensitive = true; connect_button.sensitive = true; return; } test_button.sensitive = false; connect_button.sensitive = false; } private async void toggle_buttons (bool status) { test_button.sensitive = status; connect_button.sensitive = status; cancel_button.sensitive = status; save_button.sensitive = status; } private void on_response (Gtk.Dialog source, int response_id) { switch (response_id) { case Action.TEST: if (db_types[db_type_entry.get_active ()] != "SQLite" && db_username_entry.text == "") { write_response (_("A username is required in order to connect!")); return; } if (ssh_switch.active) { open_ssh_connection.begin (false); } else { test_connection.begin (); } break; case Action.SAVE: save_connection.begin (); break; case Action.CANCEL: if (connection_manager != null) { connection_manager.ssh_tunnel_close (Log.FILE + ":" + Log.LINE.to_string ()); } destroy (); break; case Action.CONNECT: if (db_types[db_type_entry.get_active ()] != "SQLite" && db_username_entry.text == "") { write_response (_("A username is required in order to connect!")); return; } debug ("init connection"); if (ssh_switch.active) { open_ssh_connection.begin (true); } else { init_connection.begin (); } break; } } public void test_connection_callback () { test_connection.begin (); } public void init_connection_callback () { init_connection.begin (); } public async void open_ssh_connection (bool is_real) throws ThreadError { yield toggle_spinner (true); write_response (_("Opening SSH Tunnel\u2026")); var data = package_data (); connection_manager = new Sequeler.Services.ConnectionManager (window, data); if (is_real) { connection_manager.ssh_tunnel_ready.connect (init_connection_callback); } else { connection_manager.ssh_tunnel_ready.connect (test_connection_callback); } SourceFunc callback = open_ssh_connection.callback; new Thread (null, () => { try { connection_manager.ssh_tunnel_init (is_real); } catch (Error e) { write_response (e.message); } Idle.add ((owned) callback); Thread.exit (null); return null; }); yield; toggle_spinner.begin (false); } private async void test_connection () throws ThreadError { if (Thread.supported () == false) { error ("Threads are not supported!"); } yield toggle_spinner (true); write_response (_("Testing Connection\u2026")); if (connection_manager == null) { connection_manager = new Sequeler.Services.ConnectionManager (window, package_data ()); } SourceFunc callback = test_connection.callback; new Thread (null, () => { try { connection_manager.test (); } catch (Error e) { write_response (e.message); } Idle.add ((owned) callback); Thread.exit (null); return null; }); yield; write_response (_("Successfully Connected!")); connection_manager = null; yield toggle_spinner (false); } private async void save_connection () { var data = package_data (); yield toggle_spinner (true); write_response (_("Saving Connection\u2026")); yield window.main.library.check_add_item (data); yield toggle_spinner (false); write_response (_("Connection Saved!")); } private async void init_connection () { var data = package_data (); var result = new Gee.HashMap (); yield toggle_spinner (true); write_response (_("Connecting\u2026")); if (connection_manager == null) { connection_manager = new Sequeler.Services.ConnectionManager (window, data); } try { result = yield connection_manager.init_connection (); } catch (ThreadError e) { yield toggle_spinner (false); connection_manager = null; write_response (e.message); return; } if (result["status"] != "true") { yield toggle_spinner (false); connection_manager = null; write_response (result["msg"]); return; } if (settings.save_quick) { yield window.main.library.check_add_item (data); } window.data_manager.data = data; yield window.main.connection_opened (connection_manager); destroy (); } private Gee.HashMap package_data () { var packaged_data = new Gee.HashMap (); packaged_data.set ("id", connection_id.text); packaged_data.set ("title", title_entry.text); packaged_data.set ("color", color_picker.rgba.to_string ()); packaged_data.set ("type", db_types[db_type_entry.get_active ()]); packaged_data.set ("host", db_host_entry.text); packaged_data.set ("name", db_name_entry.text); packaged_data.set ("file_path", db_file_entry.get_uri () != null ? db_file_entry.get_uri () : ""); packaged_data.set ("username", db_username_entry.text); packaged_data.set ("password", db_password_entry.text); packaged_data.set ("port", db_port_entry.text); packaged_data.set ("has_ssh", ssh_switch.active.to_string ()); packaged_data.set ("ssh_host", ssh_switch.active ? ssh_host_entry.text : ""); packaged_data.set ("ssh_username", ssh_switch.active ? ssh_username_entry.text : ""); packaged_data.set ("ssh_password", ssh_switch.active ? ssh_password_entry.text : ""); packaged_data.set ("ssh_port", ssh_switch.active ? ssh_port_entry.text : ""); packaged_data.set ("ssh_identity_file", ssh_identity_file_entry.get_filename () ?? ""); packaged_data.set ("ssh_pubkey_file", ssh_pubkey_file_entry.get_filename () ?? ""); packaged_data.set ("use_ssl", ssl_switch.active.to_string ()); return packaged_data; } public async void toggle_spinner (bool type) { yield toggle_buttons (!type); if (type == true) { spinner.start (); return; } spinner.stop (); } public void write_response (string? response_text) { response_msg.label = response_text; } } ellie-commons-sequeler-9963fb4/src/Widgets/QueryParamsDialog.vala000066400000000000000000000176741512323162700251240ustar00rootroot00000000000000/** * Copyright (c) 2017-2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Francisco Altoe * Authored by: Alessandro "Alecaddd" Castellani */ /** * Dialog subclass used to prompt the user to provide the required query parameters */ public class Sequeler.Widgets.QueryParamsDialog : Gtk.Dialog { public weak Sequeler.Window window { get; construct; } public Sequeler.Layouts.Views.Query parent_view { get; construct; } public string query { get; construct; } public Gda.Statement statement { get; construct; } public Gda.Set params { get; construct; } private Gee.ArrayList entries; private Sequeler.Partials.ResponseMessage response_msg; enum Action { RUN_QUERY, CANCEL } public QueryParamsDialog ( Sequeler.Window? parent, Sequeler.Layouts.Views.Query view, string query, Gda.Statement statement, Gda.Set? @params ) { Object ( border_width: 6, deletable: false, resizable: true, title: _("Query parameters"), transient_for: parent, window: parent, parent_view: view, query: query, statement: statement, params: @params ); } construct { build_content (); response.connect (on_response); } private void build_content () { default_width = 500; var content = get_content_area (); var form_grid = new Gtk.Grid (); form_grid.margin = 6; form_grid.row_spacing = 12; form_grid.column_spacing = 12; entries = new Gee.ArrayList (); for (int i = 0; ; i++) { Gda.Holder? holder = params.get_nth_holder (i); if (holder == null) { break; } var holder_id = holder.get_id (); var label = new Gtk.Label (holder_id + ":"); form_grid.attach (label, 0, i, 1, 1); var entry = entry_for_holder (holder); form_grid.attach (entry, 1, i, 1, 1); entries.add (entry); } var scrolled_window = new Gtk.ScrolledWindow (null, null); scrolled_window.add (form_grid); int main_window_width, main_window_height; parent_view.window.get_size (out main_window_width, out main_window_height); // Prevent the scrolled window from growing bigger than the main window itself. scrolled_window.set_max_content_height (main_window_height / 2); scrolled_window.set_max_content_width (main_window_width); scrolled_window.set_propagate_natural_width (true); scrolled_window.set_propagate_natural_height (true); response_msg = new Sequeler.Partials.ResponseMessage (); content.add (scrolled_window); content.add (response_msg); var cancel_button = new Gtk.Button.with_label (_("Cancel")); add_action_widget (cancel_button, Action.CANCEL); var run_button = new Sequeler.Partials.RunQueryButton (); add_action_widget (run_button, Action.RUN_QUERY); } private Gtk.Widget entry_for_holder (Gda.Holder holder) { Type holder_g_type = holder.get_g_type (); switch (holder_g_type) { case Type.BOOLEAN: return new Gtk.Switch (); case Type.INT: case Type.UINT: var widget = new Partials.ParamEntry (this, Gtk.InputPurpose.DIGITS); return widget; case Type.FLOAT: case Type.DOUBLE: var widget = new Partials.ParamEntry (this, Gtk.InputPurpose.NUMBER); return widget; default: return new Partials.ParamEntry (this); } } /** * Takes the parse result and update the widgets style and the holder value. */ private bool store_parsed_value ( bool parse_result, Value parsed_value, Gda.Holder holder, Gtk.Entry entry ) { entry.get_style_context ().remove_class ("error"); if (!parse_result) { entry.get_style_context ().add_class ("error"); return false; } try { holder.set_value (parsed_value); } catch (Error e) { write_response (e.message); entry.get_style_context ().add_class ("error"); return false; } return true; } private bool set_value_for_holder (Gda.Holder holder, Gtk.Widget widget) { Type holder_g_type = holder.get_g_type (); if (holder_g_type == Type.BOOLEAN) { Gtk.Switch switch = widget as Gtk.Switch; if (switch == null) { return false; } try { holder.set_value (switch.get_active ()); } catch (Error ex) { return false; } return true; } else { Gtk.Entry entry = widget as Gtk.Entry; string text = entry.get_text (); bool parse_result = true; Value parsed_value; if (holder_g_type == Type.INT) { // TODO: replace this with the following once we upgrade to a newer valac // parse_result = int.try_parse (text, out parsed_value); parsed_value = int.parse (text); } else if (holder_g_type == Type.UINT) { // TODO: replace this with the following once we upgrade to a newer valac // parse_result = uint.try_parse (text, out parsed_value); parsed_value = int.parse (text); } else if (holder_g_type == Type.FLOAT) { // TODO: replace this with the following once we upgrade to a newer valac // parse_result = float.try_parse (text, out parsed_value); parsed_value = double.parse (text); } else if (holder_g_type == Type.DOUBLE) { // TODO: replace this with the following once we upgrade to a newer valac // parse_result = double.try_parse (text, out parsed_value); parsed_value = double.parse (text); } else { parsed_value = text; } return store_parsed_value (parse_result, parsed_value, holder, entry); } } private bool get_param_values () { bool validation_result = true; for (int i = 0; ; i++) { Gda.Holder? holder = params.get_nth_holder (i); if (holder == null) { break; } validation_result &= set_value_for_holder (holder, entries[i]); } return validation_result; } private void on_response (Gtk.Dialog source, int response_id) { switch (response_id) { case Action.RUN_QUERY: run_query (); break; case Action.CANCEL: destroy (); break; } } public void run_query () { if (!get_param_values ()) { return; } parent_view.run_query_statement (query, statement, params); destroy (); } private void write_response (string? response_text) { response_msg.label = response_text; } } ellie-commons-sequeler-9963fb4/src/Window.vala000066400000000000000000000064311512323162700213610ustar00rootroot00000000000000/* * Copyright (c) 2017-2020 Alecaddd (https://alecaddd.com) * * This program is free software; you can redistribute 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 * * Authored by: Alessandro "Alecaddd" Castellani */ public class Sequeler.Window : Gtk.ApplicationWindow { public weak Sequeler.Application app { get; construct; } public Sequeler.Layouts.Main main; public Sequeler.Layouts.HeaderBar headerbar; public Sequeler.Services.ActionManager action_manager; public Sequeler.Services.DataManager data_manager; public Sequeler.Widgets.ConnectionDialog? connection_dialog = null; public Gtk.AccelGroup accel_group { get; construct; } public Window (Sequeler.Application sequeler_app) { Object ( application: sequeler_app, app: sequeler_app, icon_name: Constants.PROJECT_NAME ); } construct { accel_group = new Gtk.AccelGroup (); add_accel_group (accel_group); action_manager = new Sequeler.Services.ActionManager (app, this); main = new Sequeler.Layouts.Main (this); headerbar = new Sequeler.Layouts.HeaderBar (this); data_manager = new Sequeler.Services.DataManager (); build_ui (); move (settings.pos_x, settings.pos_y); resize (settings.window_width, settings.window_height); show_app (); } public Sequeler.Window get_instance () { return this; } private void build_ui () { var css_provider = new Gtk.CssProvider (); css_provider.load_from_resource ("/io/github/ellie_commons/sequeler/stylesheet.css"); Gtk.StyleContext.add_provider_for_screen ( Gdk.Screen.get_default (), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION ); set_titlebar (headerbar); set_border_width (0); delete_event.connect (before_destroy); add (main); } public bool before_destroy () { update_status (); app.get_active_window ().destroy (); return true; } private void update_status () { int width, height, x, y; get_size (out width, out height); get_position (out x, out y); settings.pos_x = x; settings.pos_y = y; settings.window_width = width; settings.window_height = height; settings.sidebar_width = main.get_position (); if (main.database_view.query.n_tabs > 0) { settings.query_area = (main.database_view.query.current.page as Layouts.Views.Query) .panels.get_position (); } } public void show_app () { show_all (); show (); present (); } } ellie-commons-sequeler-9963fb4/src/config.vala.in000066400000000000000000000003461512323162700217630ustar00rootroot00000000000000namespace Constants { public const string PROJECT_NAME = "@PROJECT_NAME@"; public const string GETTEXT_PACKAGE = "@GETTEXT_PACKAGE@"; public const string LOCALEDIR = "@LOCALEDIR@"; public const string VERSION = "@VERSION@"; } ellie-commons-sequeler-9963fb4/src/meson.build000066400000000000000000000037711512323162700214130ustar00rootroot00000000000000conf_data = configuration_data() conf_data.set('PROJECT_NAME', application_id) conf_data.set('GETTEXT_PACKAGE', meson.project_name()) conf_data.set('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir'))) conf_data.set('VERSION', meson.project_version()) config_header = configure_file( input: 'config.vala.in', output: 'config.vala', configuration: conf_data ) # Create a new executable, list the files we want to compile, list the dependencies we need, and install executable( application_id, 'Main.vala', 'Application.vala', 'Window.vala', 'Layouts/HeaderBar.vala', 'Layouts/Main.vala', 'Layouts/Library.vala', 'Layouts/Welcome.vala', 'Layouts/DataBaseSchema.vala', 'Layouts/DataBaseView.vala', 'Layouts/Views/Structure.vala', 'Layouts/Views/Content.vala', 'Layouts/Views/Relations.vala', 'Layouts/Views/Query.vala', 'Partials/ButtonType.vala', 'Partials/DataBasePanel.vala', 'Partials/DatabaseTable.vala', 'Partials/Helpers.vala', 'Partials/LibraryItem.vala', 'Partials/TreeBuilder.vala', 'Services/Settings.vala', 'Services/ActionManager.vala', 'Services/DataManager.vala', 'Services/ConnectionManager.vala', 'Services/PasswordManager.vala', 'Services/UpgradeManager.vala', 'Services/Types/DataBaseType.vala', 'Services/Types/MySQL.vala', 'Services/Types/PostgreSQL.vala', 'Services/Types/SQLite.vala', 'Widgets/ConnectionDialog.vala', 'Widgets/QueryParamsDialog.vala', asresources, config_header, dependencies: [ dependency('gtk+-3.0'), dependency('granite', version: '>= 5.3.0'), dependency('glib-2.0'), dependency('gee-0.8'), dependency('gobject-2.0'), dependency('libxml-2.0'), dependency('libgda-5.0'), dependency('libssh2'), dependency('libsecret-1'), dependency('gtksourceview-4'), m_dep, linux_dep ], vala_args: vala_args, install: true ) ellie-commons-sequeler-9963fb4/vapi/000077500000000000000000000000001512323162700174115ustar00rootroot00000000000000ellie-commons-sequeler-9963fb4/vapi/libgda-5.0.deps000066400000000000000000000000371512323162700220100ustar00rootroot00000000000000glib-2.0 gobject-2.0 libxml-2.0ellie-commons-sequeler-9963fb4/vapi/libgda-5.0.vapi000066400000000000000000003112401512323162700220150ustar00rootroot00000000000000/* libgda-5.0.vapi generated by vapigen-0.26, do not modify. */ [CCode (cprefix = "Gda", gir_namespace = "Gda", gir_version = "5.0", lower_case_cprefix = "gda_")] namespace Gda { [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_batch_get_type ()")] public class Batch : GLib.Object { [CCode (has_construct_function = false)] public Batch (); public void add_statement (Gda.Statement stmt); public Gda.Batch copy (); public static GLib.Quark error_quark (); public bool get_parameters (out Gda.Set out_params) throws GLib.Error; public unowned GLib.SList get_statements (); public void remove_statement (Gda.Statement stmt); public string serialize (); public virtual signal void changed (GLib.Object changed_stmt); } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_binary_get_type ()")] [Compact] public class Binary { public long binary_length; [CCode (array_length = false)] public unowned uint8[] data; public static void* copy (void* boxed); public static void free (owned void* boxed); public string to_string (uint maxlen); } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_blob_get_type ()")] [Compact] public class Blob { public weak Gda.Binary data; public weak Gda.BlobOp op; public static void* copy (void* boxed); public static void free (owned void* boxed); public void set_op (Gda.BlobOp? op); public string to_string (uint maxlen); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_blob_op_get_type ()")] public abstract class BlobOp : GLib.Object { public void* _gda_reserved1; [CCode (has_construct_function = false)] protected BlobOp (); public virtual long get_length (); public virtual long read (Gda.Blob blob, long offset, long size); public bool read_all (Gda.Blob blob); public virtual long write (Gda.Blob blob, long offset); public virtual bool write_all (Gda.Blob blob); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_column_get_type ()")] public class Column : GLib.Object { [CCode (has_construct_function = false)] public Column (); public Gda.Column copy (); public bool get_allow_null (); public unowned GLib.Value? get_attribute (string attribute); public bool get_auto_increment (); public unowned string get_dbms_type (); public unowned GLib.Value? get_default_value (); public unowned string get_description (); public GLib.Type get_g_type (); public unowned string get_name (); public int get_position (); public void set_allow_null (bool allow); public void set_attribute (string attribute, GLib.Value? value, GLib.DestroyNotify? destroy); public void set_auto_increment (bool is_auto); public void set_dbms_type (string dbms_type); public void set_default_value (GLib.Value? default_value); public void set_description (string title); public void set_g_type (GLib.Type type); public void set_name (string name); public void set_position (int position); [NoAccessorMethod] public string id { owned get; set; } public virtual signal void g_type_changed (GLib.Type old_type, GLib.Type new_type); public virtual signal void name_changed (string old_name); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_config_get_type ()")] public class Config : GLib.Object { [CCode (has_construct_function = false)] protected Config (); public static bool can_modify_system_config (); public static bool define_dsn (Gda.DsnInfo info) throws GLib.Error; public static bool dsn_needs_authentication (string dsn_name); public static GLib.Quark error_quark (); public static Gda.Config @get (); public static unowned Gda.DsnInfo get_dsn_info (string dsn_name); public static unowned Gda.DsnInfo get_dsn_info_at_index (int index); public static int get_dsn_info_index (string dsn_name); public static int get_nb_dsn (); public static unowned Gda.ServerProvider get_provider (string provider_name) throws GLib.Error; public static unowned Gda.ProviderInfo? get_provider_info (string provider_name); public static Gda.DataModel list_dsn (); public static Gda.DataModel list_providers (); public static bool remove_dsn (string dsn_name) throws GLib.Error; [NoAccessorMethod] public string system_filename { owned get; set; } [NoAccessorMethod] public string user_filename { owned get; set; } public virtual signal void dsn_added (void* new_dsn); public virtual signal void dsn_changed (void* dsn); public virtual signal void dsn_removed (void* old_dsn); public virtual signal void dsn_to_be_removed (void* old_dsn); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_connection_get_type ()")] public class Connection : GLib.Object, Gda.Lockable { [CCode (has_construct_function = false)] protected Connection (); public void add_event (owned Gda.ConnectionEvent event); public void add_prepared_statement (Gda.Statement gda_stmt, Gda.PStmt prepared_stmt); public bool add_savepoint (string? name) throws GLib.Error; public bool async_cancel (uint task_id) throws GLib.Error; public GLib.Object async_fetch_result (uint task_id, out Gda.Set last_insert_row) throws GLib.Error; public uint async_statement_execute (Gda.Statement stmt, Gda.Set? @params, Gda.StatementModelUsage model_usage, [CCode (array_length = false)] GLib.Type[]? col_types, bool need_last_insert_row) throws GLib.Error; public GLib.SList batch_execute (Gda.Batch batch, Gda.Set? @params, Gda.StatementModelUsage model_usage) throws GLib.Error; public bool begin_transaction (string? name, Gda.TransactionIsolation level) throws GLib.Error; public void clear_events_list (); public void close (); public void close_no_warning (); public bool commit_transaction (string? name) throws GLib.Error; public Gda.ServerOperation create_operation (Gda.ServerOperationType type, Gda.Set? options) throws GLib.Error; public Gda.SqlParser create_parser (); public void del_prepared_statement (Gda.Statement gda_stmt); public bool delete_row_from_table (string table, string condition_column_name, GLib.Value condition_value) throws GLib.Error; public bool delete_savepoint (string? name) throws GLib.Error; public static GLib.Quark error_quark (); public int execute_non_select_command (string sql) throws GLib.Error; public Gda.DataModel execute_select_command (string sql) throws GLib.Error; [CCode (has_construct_function = false)] public Connection.from_dsn (string dsn, string? auth_string, Gda.ConnectionOptions options) throws GLib.Error; [CCode (has_construct_function = false)] public Connection.from_string (string? provider_name, string cnc_string, string? auth_string, Gda.ConnectionOptions options) throws GLib.Error; public unowned string get_authentication (); public unowned string get_cnc_string (); public bool get_date_format (out GLib.DateDMY out_first, out GLib.DateDMY out_second, out GLib.DateDMY out_third, out string out_sep) throws GLib.Error; public unowned string get_dsn (); public unowned GLib.List get_events (); public unowned Gda.MetaStore get_meta_store (); public Gda.DataModel get_meta_store_data_v (Gda.ConnectionMetaType meta_type, GLib.List filters) throws GLib.Error; public Gda.ConnectionOptions get_options (); public unowned Gda.PStmt get_prepared_statement (Gda.Statement gda_stmt); public unowned Gda.ServerProvider get_provider (); public unowned string get_provider_name (); public unowned Gda.TransactionStatus get_transaction_status (); public bool insert_row_into_table_v (string table, GLib.SList col_names, GLib.SList values) throws GLib.Error; public bool is_opened (); public bool open () throws GLib.Error; public static Gda.Connection open_from_dsn (string dsn, string? auth_string, Gda.ConnectionOptions options) throws GLib.Error; public static Gda.Connection open_from_string (string? provider_name, string cnc_string, string? auth_string, Gda.ConnectionOptions options) throws GLib.Error; public static Gda.Connection open_sqlite (string? directory, string filename, bool auto_unlink); public Gda.Statement parse_sql_string (string sql, out Gda.Set @params) throws GLib.Error; public bool perform_operation (Gda.ServerOperation op) throws GLib.Error; public Gda.ConnectionEvent point_available_event (Gda.ConnectionEventType type); public string quote_sql_identifier (string id); public GLib.SList repetitive_statement_execute (Gda.RepetitiveStatement rstmt, Gda.StatementModelUsage model_usage, [CCode (array_length = false)] GLib.Type[]? col_types, bool stop_on_error) throws GLib.Error; public bool rollback_savepoint (string? name) throws GLib.Error; public bool rollback_transaction (string? name) throws GLib.Error; public GLib.Object statement_execute (Gda.Statement stmt, Gda.Set? @params, Gda.StatementModelUsage model_usage, out Gda.Set last_insert_row) throws GLib.Error; public int statement_execute_non_select (Gda.Statement stmt, Gda.Set? @params, out Gda.Set last_insert_row) throws GLib.Error; public Gda.DataModel statement_execute_select (Gda.Statement stmt, Gda.Set? @params) throws GLib.Error; public Gda.DataModel statement_execute_select_full (Gda.Statement stmt, Gda.Set? @params, Gda.StatementModelUsage model_usage, [CCode (array_length = false)] GLib.Type[]? col_types) throws GLib.Error; public bool statement_prepare (Gda.Statement stmt) throws GLib.Error; public string statement_to_sql (Gda.Statement stmt, Gda.Set? @params, Gda.StatementSqlFlag flags, out GLib.SList params_used) throws GLib.Error; public static void string_split (string string, string out_cnc_params, string out_provider, string out_username, string? out_password); public bool supports_feature (Gda.ConnectionFeature feature); public bool update_meta_store (Gda.MetaContext? context) throws GLib.Error; public bool update_row_in_table_v (string table, string condition_column_name, GLib.Value condition_value, GLib.SList col_names, GLib.SList values) throws GLib.Error; public string value_to_sql_string (GLib.Value from); [NoAccessorMethod] public string auth_string { owned get; set; } [NoAccessorMethod] public string cnc_string { owned get; set; } [NoAccessorMethod] public string dsn { owned get; set; } [NoAccessorMethod] public int events_history_size { get; set; } [NoAccessorMethod] public uint execution_slowdown { get; set; } [NoAccessorMethod] public bool execution_timer { get; set; } [NoAccessorMethod] public bool is_wrapper { get; set; } [NoAccessorMethod] public Gda.MetaStore meta_store { owned get; set; } [NoAccessorMethod] public bool monitor_wrapped_in_mainloop { get; set; } [NoAccessorMethod] public Gda.ServerProvider provider { owned get; set; } [NoAccessorMethod] public void* thread_owner { get; set; } public virtual signal void conn_closed (); public virtual signal void conn_opened (); public virtual signal void conn_to_close (); public virtual signal void dsn_changed (); public virtual signal void error (Gda.ConnectionEvent error); public virtual signal void transaction_status_changed (); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_connection_event_get_type ()")] public class ConnectionEvent : GLib.Object { [CCode (has_construct_function = false)] protected ConnectionEvent (); public long get_code (); public unowned string get_description (); public Gda.ConnectionEventType get_event_type (); public Gda.ConnectionEventCode get_gda_code (); public unowned string get_source (); public unowned string get_sqlstate (); public void set_code (long code); public void set_description (string? description); public void set_event_type (Gda.ConnectionEventType type); public void set_gda_code (Gda.ConnectionEventCode code); public void set_source (string source); public void set_sqlstate (string sqlstate); [NoAccessorMethod] public int type { get; set; } } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_access_wrapper_get_type ()")] public class DataAccessWrapper : GLib.Object, Gda.DataModel { [CCode (has_construct_function = false)] protected DataAccessWrapper (); public static Gda.DataModel @new (Gda.DataModel model); public bool set_mapping ([CCode (array_length_cname = "mapping_size", array_length_pos = 1.1)] int[]? mapping); [NoAccessorMethod] public Gda.DataModel model { owned get; construct; } } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_comparator_get_type ()")] public class DataComparator : GLib.Object { [CCode (has_construct_function = false, type = "GObject*")] public DataComparator (Gda.DataModel old_model, Gda.DataModel new_model); public bool compute_diff () throws GLib.Error; public static GLib.Quark error_quark (); public unowned Gda.Diff? get_diff (int pos); public int get_n_diffs (); public void set_key_columns ([CCode (array_length_cname = "nb_cols", array_length_pos = 1.1)] int[] col_numbers); [NoAccessorMethod] public Gda.DataModel new_model { owned get; set; } [NoAccessorMethod] public Gda.DataModel old_model { owned get; set; } public virtual signal bool diff_computed (void* diff); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_model_array_get_type ()")] public class DataModelArray : GLib.Object, Gda.DataModel { [CCode (has_construct_function = false)] protected DataModelArray (); public void clear (); public unowned Gda.Row get_row (int row) throws GLib.Error; public static Gda.DataModel @new (int cols); public static Gda.DataModel new_with_g_types_v (int cols, [CCode (array_length = false)] GLib.Type[] types); public void set_n_columns (int cols); [NoAccessorMethod] public uint n_columns { get; set; } [NoAccessorMethod] public bool read_only { get; set; } } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_model_bdb_get_type ()")] public class DataModelBdb : GLib.Object, Gda.DataModel { [CCode (has_construct_function = false)] protected DataModelBdb (); public void clean_errors (); [NoWrapper] public virtual GLib.Value? get_data_part (void* data, int length, int part); public unowned GLib.SList get_errors (); [NoWrapper] public virtual GLib.Value? get_key_part (void* data, int length, int part); public static Gda.DataModel @new (string filename, string? db_name); [NoWrapper] public virtual bool update_data_part (void* data, int length, int part, GLib.Value value) throws GLib.Error; [NoWrapper] public virtual bool update_key_part (void* data, int length, int part, GLib.Value value) throws GLib.Error; [NoAccessorMethod] public string db_name { owned get; construct; } [NoAccessorMethod] public string filename { owned get; construct; } } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_model_dir_get_type ()")] public class DataModelDir : GLib.Object, Gda.DataModel { [CCode (has_construct_function = false)] protected DataModelDir (); public void clean_errors (); public unowned GLib.SList get_errors (); public static Gda.DataModel @new (string basedir); [NoAccessorMethod] public string basedir { owned get; construct; } } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_model_import_get_type ()")] public class DataModelImport : GLib.Object, Gda.DataModel { [CCode (has_construct_function = false)] protected DataModelImport (); public void clean_errors (); public unowned GLib.SList get_errors (); public static Gda.DataModel new_file (string filename, bool random_access, Gda.Set? options); public static Gda.DataModel new_mem (string data, bool random_access, Gda.Set? options); public static Gda.DataModel new_xml_node ([CCode (type = "xmlNodePtr")] Xml.Node* node); [NoAccessorMethod] public string data_string { owned get; construct; } [NoAccessorMethod] public string filename { owned get; construct; } [NoAccessorMethod] public Gda.Set options { owned get; construct; } [NoAccessorMethod] public bool random_access { get; construct; } [NoAccessorMethod] public bool strict { get; set construct; } [NoAccessorMethod] public void* xml_node { get; construct; } } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_model_iter_get_type ()")] public class DataModelIter : Gda.Set { [CCode (has_construct_function = false)] protected DataModelIter (); public static GLib.Quark error_quark (); [Version (deprecated = true, deprecated_since = "5.2", replacement = "")] public int get_column_for_param (Gda.Holder param); public unowned Gda.Holder get_holder_for_field (int col); public int get_row (); public unowned GLib.Value? get_value_at (int col); public unowned GLib.Value? get_value_at_e (int col) throws GLib.Error; public unowned GLib.Value? get_value_for_field (string field_name); public void invalidate_contents (); public bool is_valid (); public bool move_next (); public bool move_prev (); public bool move_to_row (int row); public bool set_value_at (int col, GLib.Value value) throws GLib.Error; [NoAccessorMethod] public int current_row { get; set; } [NoAccessorMethod] public Gda.DataModel data_model { owned get; set construct; } [NoAccessorMethod] public Gda.DataModel forced_model { owned get; set; } [NoAccessorMethod] public bool update_model { get; set; } public virtual signal void end_of_data (); public virtual signal void row_changed (int row); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_model_ldap_get_type ()")] public class DataModelLdap : GLib.Object, Gda.DataModel { [CCode (has_construct_function = false)] protected DataModelLdap (); public static GLib.List compute_columns (Gda.Connection cnc, string? attributes); [Version (deprecated = true, deprecated_since = "5.2", replacement = "")] public static Gda.DataModel @new (Gda.Connection cnc, string? base_dn, string? filter, string? attributes, Gda.LdapSearchScope scope); [CCode (has_construct_function = false)] public DataModelLdap.with_config (Gda.Connection cnc, string? base_dn, string? filter, string? attributes, Gda.LdapSearchScope scope); public string attributes { construct; } [NoAccessorMethod] public string @base { owned get; construct; } [NoAccessorMethod] public string filter { owned get; construct; } [NoAccessorMethod] public int scope { get; construct; } [NoAccessorMethod] public bool use_rdn { get; set; } } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_pivot_get_type ()")] public class DataPivot : GLib.Object, Gda.DataModel { [CCode (has_construct_function = false)] protected DataPivot (); public bool add_data (Gda.DataPivotAggregate aggregate_type, string field, string? alias) throws GLib.Error; public bool add_field (Gda.DataPivotFieldType field_type, string field, string? alias) throws GLib.Error; public static GLib.Quark error_quark (); public static Gda.DataModel @new (Gda.DataModel? model); public bool populate () throws GLib.Error; [NoAccessorMethod] public Gda.DataModel model { owned get; set; } } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_proxy_get_type ()")] public class DataProxy : GLib.Object, Gda.DataModel { [CCode (has_construct_function = false, type = "GObject*")] public DataProxy (Gda.DataModel model); public void alter_value_attributes (int proxy_row, int col, Gda.ValueAttribute alter_flags); public bool apply_all_changes () throws GLib.Error; public bool apply_row_changes (int proxy_row) throws GLib.Error; public bool cancel_all_changes (); public void cancel_row_changes (int proxy_row, int col); public void @delete (int proxy_row); public static GLib.Quark error_quark (); public unowned string get_filter_expr (); public int get_filtered_n_rows (); public int get_n_modified_rows (); public int get_n_new_rows (); public unowned Gda.DataModel get_proxied_model (); public int get_proxied_model_n_cols (); public int get_proxied_model_n_rows (); public int get_proxied_model_row (int proxy_row); public int get_sample_end (); public int get_sample_size (); public int get_sample_start (); public Gda.ValueAttribute get_value_attributes (int proxy_row, int col); public GLib.SList get_values (int proxy_row, [CCode (array_length_cname = "n_cols", array_length_pos = 2.1)] int[] cols_index); public bool has_changed (); public bool is_read_only (); public bool row_has_changed (int proxy_row); public bool row_is_deleted (int proxy_row); public bool row_is_inserted (int proxy_row); public bool set_filter_expr (string? filter_expr) throws GLib.Error; public bool set_ordering_column (int col) throws GLib.Error; public void set_sample_size (int sample_size); public void set_sample_start (int sample_start); public void undelete (int proxy_row); [CCode (has_construct_function = false)] public DataProxy.with_data_model (Gda.DataModel model); [NoAccessorMethod] public bool cache_changes { get; set; } [NoAccessorMethod] public bool defer_sync { get; set; } [NoAccessorMethod] public Gda.DataModel model { owned get; set construct; } [NoAccessorMethod] public bool prepend_null_entry { get; set; } public int sample_size { get; set construct; } public virtual signal void filter_changed (); public virtual signal void row_changes_applied (int row, int proxied_row); public virtual signal void row_delete_changed (int row, bool to_be_deleted); public virtual signal void sample_changed (int sample_start, int sample_end); public virtual signal void sample_size_changed (int sample_size); public virtual signal GLib.Error validate_row_changes (int row, int proxied_row); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_select_get_type ()")] public abstract class DataSelect : GLib.Object, Gda.DataModel { public int advertized_nrows; public int nb_stored_rows; public weak Gda.PStmt prep_stmt; [CCode (has_construct_function = false)] protected DataSelect (); public bool compute_columns_attributes () throws GLib.Error; public bool compute_modification_statements () throws GLib.Error; public bool compute_modification_statements_ext (Gda.DataSelectConditionType cond_type) throws GLib.Error; public bool compute_row_selection_condition () throws GLib.Error; public static GLib.Quark error_quark (); [NoWrapper] public virtual bool fetch_at (Gda.Row prow, int rownum) throws GLib.Error; [NoWrapper] public virtual int fetch_nb_rows (); [NoWrapper] public virtual bool fetch_next (Gda.Row prow, int rownum) throws GLib.Error; [NoWrapper] public virtual bool fetch_prev (Gda.Row prow, int rownum) throws GLib.Error; [NoWrapper] public virtual bool fetch_random (Gda.Row prow, int rownum) throws GLib.Error; public unowned Gda.Connection get_connection (); public bool prepare_for_offline () throws GLib.Error; public bool rerun () throws GLib.Error; public bool set_modification_statement (Gda.Statement mod_stmt) throws GLib.Error; public bool set_modification_statement_sql (string sql) throws GLib.Error; public bool set_row_selection_condition_sql (string sql_where) throws GLib.Error; [NoWrapper] public virtual bool store_all () throws GLib.Error; [NoAccessorMethod] public bool auto_reset { get; set; } public Gda.Connection connection { get; construct; } [NoAccessorMethod] public Gda.Statement delete_stmt { owned get; set; } [NoAccessorMethod] public Gda.Set exec_params { owned get; construct; } [NoAccessorMethod] public double execution_delay { get; set; } [NoAccessorMethod] public Gda.Statement insert_stmt { owned get; set; } [NoAccessorMethod] public uint model_usage { get; construct; } [NoAccessorMethod] public Gda.PStmt prepared_stmt { owned get; set; } [NoAccessorMethod] public Gda.Statement select_stmt { owned get; } [NoAccessorMethod] public bool store_all_rows { get; set; } [NoAccessorMethod] public Gda.Statement update_stmt { owned get; set; } } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_default_get_type ()")] [Compact] public class Default { public static string escape_string (string string); public static string unescape_string (string string); } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_dsn_info_get_type ()")] [Compact] public class DsnInfo { public weak string auth_string; public weak string cnc_string; public weak string description; public bool is_system; public weak string name; public weak string provider; [CCode (has_construct_function = false)] public DsnInfo (); public Gda.DsnInfo copy (); public void free (); } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", lower_case_csuffix = "geometricpoint", type_id = "gda_geometricpoint_get_type ()")] [Compact] public class GeometricPoint { public double x; public double y; public static void* copy (void* boxed); public static void free (void* boxed); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_handler_bin_get_type ()")] public class HandlerBin : GLib.Object, Gda.DataHandler { [CCode (has_construct_function = false)] protected HandlerBin (); public static Gda.DataHandler @new (); } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class HandlerBinPriv { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_handler_boolean_get_type ()")] public class HandlerBoolean : GLib.Object, Gda.DataHandler { [CCode (has_construct_function = false)] protected HandlerBoolean (); public static Gda.DataHandler @new (); } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class HandlerBooleanPriv { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_handler_numerical_get_type ()")] public class HandlerNumerical : GLib.Object, Gda.DataHandler { [CCode (has_construct_function = false)] protected HandlerNumerical (); public static Gda.DataHandler @new (); } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class HandlerNumericalPriv { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_handler_string_get_type ()")] public class HandlerString : GLib.Object, Gda.DataHandler { [CCode (has_construct_function = false)] protected HandlerString (); public static Gda.DataHandler @new (); public static Gda.DataHandler new_with_provider (Gda.ServerProvider prov, Gda.Connection? cnc); } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class HandlerStringPriv { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_handler_time_get_type ()")] public class HandlerTime : GLib.Object, Gda.DataHandler { [CCode (has_construct_function = false)] protected HandlerTime (); public string get_format (GLib.Type type); public string get_no_locale_str_from_value (GLib.Value value); public static Gda.DataHandler @new (); public static Gda.DataHandler new_no_locale (); public void set_sql_spec (GLib.DateDMY first, GLib.DateDMY sec, GLib.DateDMY third, char separator, bool twodigits_years); public void set_str_spec (GLib.DateDMY first, GLib.DateDMY sec, GLib.DateDMY third, char separator, bool twodigits_years); } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class HandlerTimePriv { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_handler_type_get_type ()")] public class HandlerType : GLib.Object, Gda.DataHandler { [CCode (has_construct_function = false)] protected HandlerType (); public static Gda.DataHandler @new (); } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class HandlerTypePriv { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_holder_get_type ()")] public class Holder : GLib.Object, Gda.Lockable { [CCode (has_construct_function = false)] public Holder (GLib.Type type); [NoWrapper] public virtual void att_changed (string att_name, GLib.Value att_value); public Gda.Holder copy (); public static GLib.Quark error_quark (); public void force_invalid (); public void force_invalid_e (owned GLib.Error? error); public string get_alphanum_id (); public unowned GLib.Value? get_attribute (string attribute); public unowned Gda.Holder get_bind (); public unowned GLib.Value? get_default_value (); public GLib.Type get_g_type (); public unowned string get_id (); public bool get_not_null (); public unowned Gda.DataModel get_source_model (int col); public unowned GLib.Value? get_value (); public string get_value_str (Gda.DataHandler? dh); public bool is_valid (); public bool is_valid_e () throws GLib.Error; public void set_attribute (string attribute, GLib.Value value, GLib.DestroyNotify destroy); public bool set_bind (Gda.Holder bind_to) throws GLib.Error; public void set_default_value (GLib.Value value); public void set_not_null (bool not_null); public bool set_source_model (Gda.DataModel model, int col) throws GLib.Error; public bool set_value (GLib.Value? value) throws GLib.Error; public bool set_value_str (Gda.DataHandler dh, string value) throws GLib.Error; public bool set_value_to_default (); public GLib.Value? take_static_value (GLib.Value value, bool value_changed) throws GLib.Error; public bool take_value (owned GLib.Value value) throws GLib.Error; public bool value_is_default (); [NoAccessorMethod] public string description { owned get; set; } [NoAccessorMethod] public Gda.Holder full_bind { owned get; set; } [NoAccessorMethod] public GLib.Type g_type { get; set construct; } [NoAccessorMethod] public string id { owned get; set; } [NoAccessorMethod] public string name { owned get; set; } public bool not_null { get; set; } [NoAccessorMethod] public Gda.Holder simple_bind { owned get; set; } [NoAccessorMethod] public int source_column { get; set; } [NoAccessorMethod] public Gda.DataModel source_model { owned get; set; } [NoAccessorMethod] public bool validate_changes { get; set; } public signal void attribute_changed (string att_name, GLib.Value att_value); public virtual signal void changed (); public virtual signal void source_changed (); public virtual signal GLib.Error validate_change (GLib.Value new_value); } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_meta_context_get_type ()")] [Compact] public class MetaContext { [CCode (array_length = false, array_null_terminated = true)] public weak string[] column_names; [CCode (array_length = false, array_null_terminated = true)] public weak GLib.Value[] column_values; public weak GLib.HashTable columns; public int size; public weak string table_name; [CCode (has_construct_function = false)] public MetaContext (); public Gda.MetaContext copy (); public void free (); public unowned string get_table (); public void set_column (string column, GLib.Value value, Gda.Connection? cnc); public void set_columns (GLib.HashTable columns, Gda.Connection? cnc); public void set_table (string table); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_meta_store_get_type ()")] public class MetaStore : GLib.Object { [CCode (has_construct_function = false)] public MetaStore (string? cnc_string); public Gda.DataModel create_modify_data_model (string table_name); public bool declare_foreign_key (Gda.MetaStruct? mstruct, string fk_name, string? catalog, string? schema, string table, string? ref_catalog, string? ref_schema, string ref_table, [CCode (array_length_cname = "nb_cols", array_length_pos = 8.5, array_length_type = "guint")] string[] colnames, [CCode (array_length_cname = "nb_cols", array_length_pos = 8.5, array_length_type = "guint")] string[] ref_colnames) throws GLib.Error; public static GLib.Quark error_quark (); [CCode (cname = "gda_meta_store_extract_v")] public Gda.DataModel extract (string select_sql, GLib.HashTable? vars) throws GLib.Error; public bool get_attribute_value (string att_name, out string att_value) throws GLib.Error; public unowned Gda.Connection get_internal_connection (); public int get_version (); public bool modify_v (string table_name, Gda.DataModel? new_data, string? condition, [CCode (array_length_cname = "nvalues", array_length_pos = 3.5)] string[] value_names, [CCode (array_length_cname = "nvalues", array_length_pos = 3.5)] GLib.Value[] values) throws GLib.Error; public bool modify_with_context (Gda.MetaContext context, Gda.DataModel? new_data) throws GLib.Error; public bool schema_add_custom_object (string xml_description) throws GLib.Error; public GLib.SList schema_get_all_tables (); public GLib.SList schema_get_depend_tables (string table_name); public Gda.MetaStruct schema_get_structure () throws GLib.Error; public bool schema_remove_custom_object (string obj_name) throws GLib.Error; public bool set_attribute_value (string att_name, string? att_value) throws GLib.Error; public void set_identifiers_style (Gda.SqlIdentifierStyle style); public void set_reserved_keywords_func (Gda.SqlReservedKeywordsFunc? func); public static string sql_identifier_quote (string id, Gda.Connection cnc); public bool undeclare_foreign_key (Gda.MetaStruct? mstruct, string fk_name, string? catalog, string? schema, string table, string? ref_catalog, string? ref_schema, string ref_table) throws GLib.Error; [CCode (has_construct_function = false)] public MetaStore.with_file (string file_name); public string catalog { construct; } [NoAccessorMethod] public Gda.Connection cnc { owned get; construct; } public string cnc_string { construct; } public string schema { construct; } public signal void meta_changed (GLib.SList changes); public virtual signal void meta_reset (); public virtual signal GLib.Error suggest_update (Gda.MetaContext suggest); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_meta_struct_get_type ()")] public class MetaStruct : GLib.Object { [CCode (has_construct_function = false)] public MetaStruct (Gda.MetaStore store, Gda.MetaStructFeature features); public unowned Gda.MetaDbObject? complement (Gda.MetaDbObjectType type, GLib.Value? catalog, GLib.Value? schema, GLib.Value name) throws GLib.Error; public bool complement_all () throws GLib.Error; public bool complement_default () throws GLib.Error; public bool complement_depend (Gda.MetaDbObject dbo) throws GLib.Error; public bool complement_schema (GLib.Value? catalog, GLib.Value? schema) throws GLib.Error; public string dump_as_graph (Gda.MetaGraphInfo info) throws GLib.Error; public static GLib.Quark error_quark (); public GLib.SList get_all_db_objects (); public unowned Gda.MetaDbObject? get_db_object (GLib.Value? catalog, GLib.Value? schema, GLib.Value name); public bool load_from_xml_file (string? catalog, string? schema, string xml_spec_file) throws GLib.Error; public bool sort_db_objects (Gda.MetaSortType sort_type) throws GLib.Error; [NoAccessorMethod] public uint features { get; construct; } [NoAccessorMethod] public Gda.MetaStore meta_store { owned get; construct; } } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_null_get_type ()")] [Compact] public class Null { } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_numeric_get_type ()")] [Compact] public class Numeric { public weak string number; public long precision; public long width; [CCode (has_construct_function = false)] public Numeric (); public Gda.Numeric copy (); public void free (); public double get_double (); public long get_precision (); public string? get_string (); public long get_width (); public void set_double (double number); public void set_from_string (string str); public void set_precision (long precision); public void set_width (long width); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_pstmt_get_type ()")] public abstract class PStmt : GLib.Object { public int ncols; public weak GLib.SList param_ids; public weak string sql; public weak GLib.SList tmpl_columns; public GLib.Type types; [CCode (has_construct_function = false)] protected PStmt (); public void copy_contents (Gda.PStmt dest); public unowned Gda.Statement get_gda_statement (); public void set_gda_statement (Gda.Statement stmt); } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_quark_list_get_type ()")] [Compact] public class QuarkList { [CCode (has_construct_function = false)] public QuarkList (); public void add_from_string (string string, bool cleanup); public void clear (); public Gda.QuarkList copy (); public unowned string find (string name); public void @foreach (GLib.HFunc func); public void free (); [CCode (has_construct_function = false)] public QuarkList.from_string (string string); public void protect_values (); public void remove (string name); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_repetitive_statement_get_type ()")] public class RepetitiveStatement : GLib.Object { [CCode (has_construct_function = false)] public RepetitiveStatement (Gda.Statement stmt); public bool append_set (Gda.Set values, bool make_copy); public GLib.SList get_all_sets (); public bool get_template_set (Gda.Set @set) throws GLib.Error; [NoAccessorMethod] public Gda.Statement statement { owned get; construct; } } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_row_get_type ()")] public class Row : GLib.Object { [CCode (has_construct_function = false)] public Row (int count); public int get_length (); public unowned GLib.Value? get_value (int num); public void invalidate_value (GLib.Value value); public void invalidate_value_e (GLib.Value value, owned GLib.Error? error); public bool value_is_valid (GLib.Value value); public bool value_is_valid_e (GLib.Value value) throws GLib.Error; [NoAccessorMethod] public int nb_values { set; } } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_server_operation_get_type ()")] public class ServerOperation : GLib.Object { [CCode (has_construct_function = false)] public ServerOperation (Gda.ServerOperationType op_type, string xml_file); public uint add_item_to_sequence (string seq_path); public bool del_item_from_sequence (string item_path); public static GLib.Quark error_quark (); public string get_node_parent (string path); public string get_node_path_portion (string path); public Gda.ServerOperationNodeType get_node_type (string path, Gda.ServerOperationNodeStatus? status); public Gda.ServerOperationType get_op_type (); [CCode (array_length = false, array_null_terminated = true)] public string[] get_root_nodes (); [CCode (array_length = false, array_null_terminated = true)] public string[] get_sequence_item_names (string path); public uint get_sequence_max_size (string path); public uint get_sequence_min_size (string path); public unowned string get_sequence_name (string path); public uint get_sequence_size (string path); public string get_sql_identifier_at_path (Gda.Connection? cnc, Gda.ServerProvider? prov, string path); [CCode (cname = "gda_server_operation_get_value_at_path")] public unowned GLib.Value? get_value_at (string path); public bool is_valid (string? xml_file) throws GLib.Error; public bool load_data_from_xml ([CCode (type = "xmlNodePtr")] Xml.Node* node) throws GLib.Error; public static unowned string op_type_to_string (Gda.ServerOperationType type); public bool perform_create_database (string? provider) throws GLib.Error; public bool perform_create_table () throws GLib.Error; public bool perform_drop_database (string? provider) throws GLib.Error; public bool perform_drop_table () throws GLib.Error; public static Gda.ServerOperation prepare_create_database (string provider, string? db_name) throws GLib.Error; public static Gda.ServerOperation prepare_drop_database (string provider, string? db_name) throws GLib.Error; public static Gda.ServerOperation prepare_drop_table (Gda.Connection cnc, string table_name) throws GLib.Error; [NoWrapper] public virtual void seq_item_added (string seq_path, int item_index); [NoWrapper] public virtual void seq_item_remove (string seq_path, int item_index); [CCode (cname = "gda_server_operation_set_value_at_path")] public bool set_value_at (string? value, string path) throws GLib.Error; public static Gda.ServerOperationType string_to_op_type (string str); [NoAccessorMethod] public Gda.Connection connection { owned get; construct; } public int op_type { get; construct; } [NoAccessorMethod] public Gda.ServerProvider provider { owned get; construct; } public string spec_filename { construct; } public signal void sequence_item_added (string seq_path, int item_index); public signal void sequence_item_remove (string seq_path, int item_index); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_server_provider_get_type ()")] public abstract class ServerProvider : GLib.Object { [CCode (has_construct_function = false)] protected ServerProvider (); [NoWrapper] public virtual bool add_savepoint (Gda.Connection cnc, string name) throws GLib.Error; [NoWrapper] public virtual bool begin_transaction (Gda.Connection cnc, string name, Gda.TransactionIsolation level) throws GLib.Error; [NoWrapper] public virtual bool cancel (Gda.Connection cnc, uint task_id) throws GLib.Error; [NoWrapper] public virtual bool close_connection (Gda.Connection cnc); [NoWrapper] public virtual bool commit_transaction (Gda.Connection cnc, string name) throws GLib.Error; public virtual Gda.ServerOperation create_operation (Gda.Connection? cnc, Gda.ServerOperationType type, Gda.Set? options) throws GLib.Error; public virtual Gda.SqlParser create_parser (Gda.Connection? cnc); [NoWrapper] public virtual bool delete_savepoint (Gda.Connection cnc, string name) throws GLib.Error; public static GLib.Quark error_quark (); public virtual string escape_string (Gda.Connection? cnc, string str); public string find_file (string inst_dir, string filename); public unowned Gda.DataHandler get_data_handler_dbms (Gda.Connection? cnc, string for_type); [Version (deprecated = true, deprecated_since = "5.2", replacement = "")] public unowned Gda.DataHandler get_data_handler_default (Gda.Connection? cnc, GLib.Type type, string dbms_type); public unowned Gda.DataHandler get_data_handler_g_type (Gda.Connection? cnc, GLib.Type for_type); [NoWrapper] public virtual unowned string get_database (Gda.Connection cnc); [NoWrapper] public virtual unowned string get_def_dbms_type (Gda.Connection cnc, GLib.Type g_type); public unowned string get_default_dbms_type (Gda.Connection? cnc, GLib.Type type); public virtual unowned string get_name (); public virtual unowned string get_server_version (Gda.Connection cnc); public virtual unowned string get_version (); [NoWrapper] public virtual bool handle_async (Gda.Connection cnc) throws GLib.Error; public void handler_declare (Gda.DataHandler dh, Gda.Connection cnc, GLib.Type g_type, string dbms_type); public unowned Gda.DataHandler handler_find (Gda.Connection? cnc, GLib.Type g_type, string? dbms_type); [NoWrapper] public virtual string identifier_quote (Gda.Connection cnc, string id, bool for_meta_store, bool force_quotes); public unowned Gda.SqlParser internal_get_parser (); [NoWrapper] public virtual bool is_busy (Gda.Connection cnc) throws GLib.Error; public static string load_file_contents (string inst_dir, string data_dir, string filename); public bool perform_operation (Gda.Connection? cnc, Gda.ServerOperation op) throws GLib.Error; public bool perform_operation_default (Gda.Connection? cnc, Gda.ServerOperation op) throws GLib.Error; public virtual string render_operation (Gda.Connection? cnc, Gda.ServerOperation op) throws GLib.Error; [NoWrapper] public virtual bool rollback_savepoint (Gda.Connection cnc, string name) throws GLib.Error; [NoWrapper] public virtual bool rollback_transaction (Gda.Connection cnc, string name) throws GLib.Error; [NoWrapper] public virtual bool statement_prepare (Gda.Connection cnc, Gda.Statement stmt) throws GLib.Error; public GLib.Value? string_to_value (Gda.Connection? cnc, string string, GLib.Type preferred_type, string? dbms_type); public virtual bool supports_feature (Gda.Connection? cnc, Gda.ConnectionFeature feature); public virtual bool supports_operation (Gda.Connection? cnc, Gda.ServerOperationType type, Gda.Set? options); public virtual string unescape_string (Gda.Connection? cnc, string str); public string value_to_sql_string (Gda.Connection? cnc, GLib.Value from); } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class ServerProviderInfo { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_set_get_type ()")] public class Set : GLib.Object { public weak GLib.SList groups_list; public weak GLib.SList nodes_list; public weak GLib.SList sources_list; [CCode (has_construct_function = false)] public Set (GLib.SList holders); public bool add_holder (Gda.Holder holder); public Gda.Set copy (); public static GLib.Quark error_quark (); [CCode (has_construct_function = false)] public Set.from_spec_node ([CCode (type = "xmlNodePtr")] Xml.Node* xml_spec) throws GLib.Error; [CCode (has_construct_function = false)] public Set.from_spec_string (string xml_spec) throws GLib.Error; public unowned Gda.SetGroup get_group (Gda.Holder holder); public unowned Gda.Holder get_holder (string holder_id); public unowned GLib.Value? get_holder_value (string holder_id); public unowned Gda.SetNode get_node (Gda.Holder holder); public unowned Gda.Holder get_nth_holder (int pos); public unowned Gda.SetSource get_source (Gda.Holder holder); public unowned Gda.SetSource get_source_for_model (Gda.DataModel model); public bool is_valid () throws GLib.Error; public void merge_with_set (Gda.Set set_to_merge); [CCode (has_construct_function = false)] public Set.read_only (GLib.SList holders); public void remove_holder (Gda.Holder holder); public void replace_source_model (Gda.SetSource source, Gda.DataModel model); [NoAccessorMethod] public string description { owned get; set; } public void* holders { construct; } [NoAccessorMethod] public string id { owned get; set; } [NoAccessorMethod] public string name { owned get; set; } [NoAccessorMethod] public bool validate_changes { get; set; } public virtual signal void holder_attr_changed (Gda.Holder holder, string attr_name, GLib.Value attr_value); public virtual signal void holder_changed (Gda.Holder holder); public virtual signal void holder_type_set (Gda.Holder holder); public virtual signal void public_data_changed (); public virtual signal void source_model_changed (void* source); public virtual signal GLib.Error validate_holder_change (Gda.Holder holder, GLib.Value new_value); public virtual signal GLib.Error validate_set (); } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_set_group_get_type ()")] [Compact] public class SetGroup { public weak GLib.SList nodes; public weak Gda.SetSource nodes_source; [CCode (has_construct_function = false)] public SetGroup (Gda.SetNode node); public void add_node (Gda.SetNode node); public Gda.SetGroup copy (); public void free (); public int get_n_nodes (); public Gda.SetNode get_node (); public unowned GLib.SList get_nodes (); public Gda.SetSource get_source (); public void set_source (Gda.SetSource source); } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_set_node_get_type ()")] [Compact] public class SetNode { public weak Gda.Holder holder; public int source_column; public weak Gda.DataModel source_model; [CCode (has_construct_function = false)] public SetNode (Gda.Holder holder); public Gda.SetNode copy (); public void free (); public unowned Gda.DataModel get_data_model (); public unowned Gda.Holder get_holder (); public int get_source_column (); public void set_data_model (Gda.DataModel? model); public void set_holder (Gda.Holder holder); public void set_source_column (int column); } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_set_source_get_type ()")] [Compact] public class SetSource { public weak Gda.DataModel data_model; public weak GLib.SList nodes; [CCode (has_construct_function = false)] public SetSource (Gda.DataModel model); public void add_node (Gda.SetNode node); public Gda.SetSource copy (); public void free (); public unowned Gda.DataModel get_data_model (); public int get_n_nodes (); public unowned GLib.SList get_nodes (); public void set_data_model (Gda.DataModel model); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_short_get_type ()")] public class Short { [CCode (has_construct_function = false)] protected Short (); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_sql_builder_get_type ()")] public class SqlBuilder : GLib.Object { [CCode (has_construct_function = false)] public SqlBuilder (Gda.SqlStatementType stmt_type); public Gda.SqlBuilderId add_case_v (Gda.SqlBuilderId test_expr, Gda.SqlBuilderId else_expr, [CCode (array_length_cname = "args_size", array_length_pos = 4.1)] Gda.SqlBuilderId[] when_array, [CCode (array_length_cname = "args_size", array_length_pos = 4.1)] Gda.SqlBuilderId[] then_array); public Gda.SqlBuilderId add_cond (Gda.SqlOperatorType op, Gda.SqlBuilderId op1, Gda.SqlBuilderId op2, Gda.SqlBuilderId op3); public Gda.SqlBuilderId add_expr_value (Gda.DataHandler? dh, GLib.Value? value); public Gda.SqlBuilderId add_field_id (string field_name, string? table_name); public void add_field_value_as_gvalue (string field_name, GLib.Value? value); public void add_field_value_id (Gda.SqlBuilderId field_id, Gda.SqlBuilderId value_id); public Gda.SqlBuilderId add_function_v (string func_name, [CCode (array_length_cname = "args_size", array_length_pos = 2.1)] Gda.SqlBuilderId[] args); public Gda.SqlBuilderId add_id (string str); public Gda.SqlBuilderId add_param (string param_name, GLib.Type type, bool nullok); public void compound_add_sub_select_from_builder (Gda.SqlBuilder subselect); public void compound_set_type (Gda.SqlStatementCompoundType compound_type); public static GLib.Quark error_quark (); public Gda.Statement get_statement () throws GLib.Error; public Gda.SqlBuilderId import_expression_from_builder (Gda.SqlBuilder query, Gda.SqlBuilderId expr_id); public void join_add_field (Gda.SqlBuilderId join_id, string field_name); public Gda.SqlBuilderId select_add_field (string field_name, string? table_name, string? alias); public Gda.SqlBuilderId select_add_target (string table_name, string? alias); public Gda.SqlBuilderId select_add_target_id (Gda.SqlBuilderId table_id, string? alias); public void select_group_by (Gda.SqlBuilderId expr_id); public void select_order_by (Gda.SqlBuilderId expr_id, bool asc, string? collation_name); public void select_set_distinct (bool distinct, Gda.SqlBuilderId expr_id); public void select_set_having (Gda.SqlBuilderId cond_id); public void select_set_limit (Gda.SqlBuilderId limit_count_expr_id, Gda.SqlBuilderId limit_offset_expr_id); public void set_table (string table_name); public void set_where (Gda.SqlBuilderId cond_id); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_sql_parser_get_type ()")] public class SqlParser : GLib.Object, Gda.Lockable { [CCode (has_construct_function = false)] public SqlParser (); public static GLib.Quark error_quark (); public Gda.Batch parse_file_as_batch (string filename) throws GLib.Error; public Gda.Statement parse_string (string sql, out string remain) throws GLib.Error; public Gda.Batch parse_string_as_batch (string sql, out string remain) throws GLib.Error; public void set_overflow_error (); public void set_syntax_error (); [NoAccessorMethod] public int column_error { get; } [NoAccessorMethod] public bool debug { set; } [NoAccessorMethod] public int line_error { get; } [NoAccessorMethod] public int mode { get; set; } [NoAccessorMethod] public int tokenizer_flavour { get; set; } } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class SqlStatement { public void compound_set_type (Gda.SqlStatementCompoundType type); public void compound_take_stmt (Gda.SqlStatement s); } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class SqlStatementDelete { } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class SqlStatementInsert { } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class SqlStatementSelect { } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class SqlStatementTransaction { } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class SqlStatementUnknown { } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class SqlStatementUpdate { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_statement_get_type ()")] public class Statement : GLib.Object { [CCode (has_construct_function = false)] public Statement (); public bool check_structure () throws GLib.Error; public bool check_validity (Gda.Connection? cnc) throws GLib.Error; public Gda.Statement copy (); public static GLib.Quark error_quark (); public bool get_parameters (out Gda.Set out_params) throws GLib.Error; public Gda.SqlStatementType get_statement_type (); public bool is_useless (); public bool normalize (Gda.Connection cnc) throws GLib.Error; public string serialize (); public string to_sql_extended (Gda.Connection? cnc, Gda.Set? @params, Gda.StatementSqlFlag flags, out GLib.SList params_used) throws GLib.Error; public string to_sql_real (Gda.SqlRenderingContext context) throws GLib.Error; [NoAccessorMethod] public void* structure { get; set; } public virtual signal void checked (Gda.Connection cnc, bool checked); public virtual signal void reset (); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_thread_wrapper_get_type ()")] public class ThreadWrapper : GLib.Object { [CCode (has_construct_function = false)] public ThreadWrapper (); public bool cancel (uint id); public ulong connect_raw (void* instance, string sig_name, bool private_thread, bool private_job, Gda.ThreadWrapperCallback callback); public void disconnect (ulong id); public static GLib.Quark error_quark (); public uint execute_void ([CCode (destroy_notify_pos = 2.1)] owned Gda.ThreadWrapperVoidFunc func, void* arg) throws GLib.Error; public void* fetch_result (bool may_lock, uint exp_id) throws GLib.Error; public unowned GLib.IOChannel get_io_channel (); public int get_waiting_size (); public void iterate (bool may_block); public void steal_signal (ulong id); public void unset_io_channel (); } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_time_get_type ()")] public struct Time { public ulong fraction; public ushort hour; public ushort minute; public ushort second; public long timezone; public void change_timezone (long ntz); public static void* copy (void* boxed); public static void free (void* boxed); public bool valid (); } [CCode (cheader_filename = "libgda/libgda.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gda_timestamp_get_type ()")] public struct Timestamp { public ushort day; public ulong fraction; public ushort hour; public ushort minute; public ushort month; public ushort second; public long timezone; public short year; public void change_timezone (long ntz); public static void* copy (void* boxed); public static void free (void* boxed); public bool valid (); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_transaction_status_get_type ()")] public class TransactionStatus : GLib.Object { public weak GLib.List events; public Gda.TransactionIsolation isolation_level; public weak string name; public Gda.TransactionStatusState state; [CCode (has_construct_function = false)] public TransactionStatus (string name); public Gda.TransactionStatus find (string str, Gda.TransactionStatusEvent destev); public Gda.TransactionStatus find_current (Gda.TransactionStatusEvent destev, bool unnamed_only); public void free_events (Gda.TransactionStatusEvent event, bool free_after); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_tree_get_type ()")] public class Tree : GLib.Object { [CCode (has_construct_function = false)] public Tree (); public void add_manager (Gda.TreeManager manager); public void clean (); public void dump (Gda.TreeNode? node, void* stream); public static GLib.Quark error_quark (); public unowned Gda.TreeNode get_node (string tree_path, bool use_names); public unowned Gda.TreeManager get_node_manager (Gda.TreeNode node); public string get_node_path (Gda.TreeNode node); public GLib.SList get_nodes_in_path (string? tree_path, bool use_names); public void set_attribute (string attribute, GLib.Value value, GLib.DestroyNotify destroy); public bool update_all () throws GLib.Error; public bool update_children (Gda.TreeNode? node) throws GLib.Error; public bool update_part (Gda.TreeNode node) throws GLib.Error; [NoAccessorMethod] public bool is_list { get; } public virtual signal void node_changed (Gda.TreeNode node); public virtual signal void node_deleted (string node_path); public virtual signal void node_has_child_toggled (Gda.TreeNode node); public virtual signal void node_inserted (Gda.TreeNode node); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_tree_manager_get_type ()")] public class TreeManager : GLib.Object { [CCode (has_construct_function = false)] protected TreeManager (); public void add_manager (Gda.TreeManager sub); public void add_new_node_attribute (string attribute, GLib.Value? value); public Gda.TreeNode create_node (Gda.TreeNode? parent, string? name); public static GLib.Quark error_quark (); public unowned GLib.SList get_managers (); [NoAccessorMethod] public void* func { get; set construct; } [NoAccessorMethod] public bool recursive { get; set construct; } } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_tree_mgr_columns_get_type ()")] public class TreeMgrColumns : Gda.TreeManager { [CCode (has_construct_function = false, type = "GdaTreeManager*")] public TreeMgrColumns (Gda.Connection cnc, string schema, string table_name); [NoAccessorMethod] public Gda.Connection connection { owned get; construct; } [NoAccessorMethod] public Gda.MetaStore meta_store { owned get; construct; } public string schema { construct; } public string table_name { construct; } } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class TreeMgrColumnsPriv { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_tree_mgr_label_get_type ()")] public class TreeMgrLabel : Gda.TreeManager { [CCode (has_construct_function = false, type = "GdaTreeManager*")] public TreeMgrLabel (string label); public string label { construct; } } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class TreeMgrLabelPriv { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_tree_mgr_ldap_get_type ()")] public class TreeMgrLdap : Gda.TreeManager { [CCode (has_construct_function = false, type = "GdaTreeManager*")] public TreeMgrLdap (Gda.Connection cnc, string? dn); [NoAccessorMethod] public string dn { owned get; construct; } } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class TreeMgrLdapPriv { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_tree_mgr_schemas_get_type ()")] public class TreeMgrSchemas : Gda.TreeManager { [CCode (has_construct_function = false, type = "GdaTreeManager*")] public TreeMgrSchemas (Gda.Connection cnc); [NoAccessorMethod] public Gda.Connection connection { owned get; construct; } [NoAccessorMethod] public Gda.MetaStore meta_store { owned get; construct; } } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class TreeMgrSchemasPriv { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_tree_mgr_select_get_type ()")] public class TreeMgrSelect : Gda.TreeManager { [CCode (has_construct_function = false, type = "GdaTreeManager*")] public TreeMgrSelect (Gda.Connection cnc, Gda.Statement stmt, Gda.Set @params); [NoAccessorMethod] public Gda.Connection connection { owned get; construct; } [NoAccessorMethod] public Gda.Set @params { owned get; construct; } [NoAccessorMethod] public Gda.Statement statement { owned get; construct; } } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class TreeMgrSelectPriv { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_tree_mgr_tables_get_type ()")] public class TreeMgrTables : Gda.TreeManager { [CCode (has_construct_function = false, type = "GdaTreeManager*")] public TreeMgrTables (Gda.Connection cnc, string? schema); [NoAccessorMethod] public Gda.Connection connection { owned get; construct; } [NoAccessorMethod] public Gda.MetaStore meta_store { owned get; construct; } public string schema { construct; } } [CCode (cheader_filename = "libgda/libgda.h")] [Compact] public class TreeMgrTablesPriv { } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_tree_node_get_type ()")] public class TreeNode : GLib.Object { [CCode (has_construct_function = false)] public TreeNode (string? name); [NoWrapper] public virtual void dump_children (string prefix, GLib.StringBuilder in_string); [NoWrapper] public virtual string dump_header (); public static GLib.Quark error_quark (); public unowned GLib.Value? fetch_attribute (string attribute); public unowned Gda.TreeNode get_child_index (int index); public unowned Gda.TreeNode get_child_name (string name); public GLib.SList get_children (); public unowned GLib.Value? get_node_attribute (string attribute); public unowned Gda.TreeNode get_parent (); public void set_node_attribute (string attribute, GLib.Value? value, GLib.DestroyNotify destroy); [NoAccessorMethod] public string name { owned get; set; } public virtual signal void node_changed (Gda.TreeNode node); public virtual signal void node_deleted (string relative_path); public virtual signal void node_has_child_toggled (Gda.TreeNode node); public virtual signal void node_inserted (Gda.TreeNode node); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_ushort_get_type ()")] public class UShort { [CCode (has_construct_function = false)] protected UShort (); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_xa_transaction_get_type ()")] public class XaTransaction : GLib.Object { [CCode (has_construct_function = false)] public XaTransaction (uint32 format, string global_transaction_id); public bool begin () throws GLib.Error; public bool commit (out GLib.SList cnc_to_recover) throws GLib.Error; public bool commit_recovered (out GLib.SList cnc_to_recover) throws GLib.Error; public static GLib.Quark error_quark (); public bool register_connection (Gda.Connection cnc, string branch) throws GLib.Error; public bool rollback () throws GLib.Error; public void unregister_connection (Gda.Connection cnc); [NoAccessorMethod] public uint format_id { get; construct; } [NoAccessorMethod] public string transaction_id { owned get; construct; } } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_handler_get_type ()")] public interface DataHandler : GLib.Object { public abstract bool accepts_g_type (GLib.Type type); public static unowned Gda.DataHandler get_default (GLib.Type for_type); public abstract unowned string get_descr (); public abstract GLib.Value? get_sane_init_value (GLib.Type type); public abstract string get_sql_from_value (GLib.Value? value); public abstract string get_str_from_value (GLib.Value? value); public abstract GLib.Value? get_value_from_sql (string? sql, GLib.Type type); public abstract GLib.Value? get_value_from_str (string? str, GLib.Type type); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_data_model_get_type ()")] public interface DataModel : GLib.Object { public bool add_data_from_xml_node ([CCode (type = "xmlNodePtr")] Xml.Node* node) throws GLib.Error; [CCode (vfunc_name = "i_append_row")] public abstract int append_row () throws GLib.Error; [CCode (vfunc_name = "i_append_values")] public abstract int append_values (GLib.List? values) throws GLib.Error; public Gda.DataModelArray array_copy_model () throws GLib.Error; public Gda.DataModelArray array_copy_model_ext ([CCode (array_length_cname = "ncols", array_length_pos = 0.5)] int[] cols) throws GLib.Error; [CCode (vfunc_name = "i_create_iter")] public abstract Gda.DataModelIter create_iter (); [CCode (vfunc_name = "i_describe_column")] public abstract unowned Gda.Column describe_column (int col); public void dump (void* to_stream); public string dump_as_string (); public static GLib.Quark error_quark (); public bool export_to_file (Gda.DataModelIOFormat format, string file, [CCode (array_length_cname = "nb_cols", array_length_pos = 3.5)] int[]? cols, [CCode (array_length_cname = "nb_rows", array_length_pos = 4.5)] int[]? rows, Gda.Set options) throws GLib.Error; public string export_to_string (Gda.DataModelIOFormat format, [CCode (array_length_cname = "nb_cols", array_length_pos = 2.5)] int[]? cols, [CCode (array_length_cname = "nb_rows", array_length_pos = 3.5)] int[]? rows, Gda.Set options); public void freeze (); [CCode (vfunc_name = "i_get_access_flags")] public abstract Gda.DataModelAccessFlags get_access_flags (); [CCode (vfunc_name = "i_get_attributes_at")] public abstract Gda.ValueAttribute get_attributes_at (int col, int row); public int get_column_index (string name); public unowned string get_column_name (int col); public unowned string get_column_title (int col); [CCode (array_length = false, array_null_terminated = true, vfunc_name = "i_get_exceptions")] public abstract unowned GLib.Error[] get_exceptions (); [CCode (vfunc_name = "i_get_n_columns")] public abstract int get_n_columns (); [CCode (vfunc_name = "i_get_n_rows")] public abstract int get_n_rows (); [CCode (vfunc_name = "i_get_notify")] public abstract bool get_notify (); [CCode (vfunc_name = "i_find_row")] public abstract int get_row_from_values (GLib.SList values, [CCode (array_length = false)] int[] cols_index); public unowned GLib.Value? get_typed_value_at (int col, int row, GLib.Type expected_type, bool nullok) throws GLib.Error; [CCode (vfunc_name = "i_get_value_at")] public abstract unowned GLib.Value? get_value_at (int col, int row) throws GLib.Error; public bool import_from_file (string file, GLib.HashTable? cols_trans, Gda.Set options) throws GLib.Error; public bool import_from_model (Gda.DataModel from, bool overwrite, GLib.HashTable? cols_trans) throws GLib.Error; public bool import_from_string (string string, GLib.HashTable? cols_trans, Gda.Set options) throws GLib.Error; [CCode (vfunc_name = "i_iter_at_row")] [Version (deprecated = true, deprecated_since = "5.2", replacement = "")] public abstract bool iter_at_row (Gda.DataModelIter iter, int row); [CCode (vfunc_name = "i_iter_next")] [Version (deprecated = true, deprecated_since = "5.2", replacement = "")] public abstract bool iter_next (Gda.DataModelIter iter); [CCode (vfunc_name = "i_iter_prev")] [Version (deprecated = true, deprecated_since = "5.2", replacement = "")] public abstract bool iter_prev (Gda.DataModelIter iter); [CCode (vfunc_name = "i_iter_set_value")] [Version (deprecated = true, deprecated_since = "5.2", replacement = "")] public abstract bool iter_set_value (Gda.DataModelIter iter, int col, GLib.Value value) throws GLib.Error; [CCode (vfunc_name = "i_remove_row")] public abstract bool remove_row (int row) throws GLib.Error; [CCode (vfunc_name = "i_send_hint")] public abstract void send_hint (Gda.DataModelHint hint, GLib.Value? hint_value); public void set_column_name (int col, string name); public void set_column_title (int col, string title); [CCode (vfunc_name = "i_set_notify")] [Version (deprecated = true, deprecated_since = "5.2", replacement = "")] public abstract void set_notify (bool do_notify_changes); [CCode (vfunc_name = "i_set_value_at")] public abstract bool set_value_at (int col, int row, GLib.Value value) throws GLib.Error; [CCode (vfunc_name = "i_set_values")] public abstract bool set_values (int row, GLib.List? values) throws GLib.Error; public void thaw (); public virtual signal void access_changed (); public virtual signal void changed (); [HasEmitter] public virtual signal void reset (); [HasEmitter] public virtual signal void row_inserted (int row); [HasEmitter] public virtual signal void row_removed (int row); [HasEmitter] public virtual signal void row_updated (int row); } [CCode (cheader_filename = "libgda/libgda.h", type_id = "gda_lockable_get_type ()")] public interface Lockable : GLib.Object { [NoWrapper] public abstract void i_lock (); [NoWrapper] public abstract bool i_trylock (); [NoWrapper] public abstract void i_unlock (); public void @lock (); public bool trylock (); public void unlock (); } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct Diff { public Gda.DiffType type; public int old_row; public int new_row; public weak GLib.HashTable values; } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct MetaDbObject { public Gda.MetaDbObjectType obj_type; public bool outdated; public weak string obj_catalog; public weak string obj_schema; public weak string obj_name; public weak string obj_short_name; public weak string obj_full_name; public weak string obj_owner; public weak GLib.SList depend_list; [CCode (cname = "extra.meta_table")] public Gda.MetaTable extra_meta_table; [CCode (cname = "extra.meta_view")] public Gda.MetaView extra_meta_view; } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct MetaStoreChange { public Gda.MetaStoreChangeType c_type; public weak string table_name; public weak GLib.HashTable keys; } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct MetaTable { public weak GLib.SList columns; public int pk_cols_array; public int pk_cols_nb; public weak GLib.SList reverse_fk_list; public weak GLib.SList fk_list; } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct MetaTableColumn { public weak string column_name; public weak string column_type; public GLib.Type gtype; public bool pkey; public bool nullok; public weak string default_value; public void foreach_attribute (Gda.AttributesManagerFunc func); public unowned GLib.Value? get_attribute (string attribute); public void set_attribute (string attribute, GLib.Value? value, GLib.DestroyNotify? destroy); } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct MetaTableForeignKey { public Gda.MetaDbObject meta_table; public Gda.MetaDbObject depend_on; public int cols_nb; public int fk_cols_array; public weak string fk_names_array; public int ref_pk_cols_array; public weak string ref_pk_names_array; public weak string fk_name; } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct MetaView { public Gda.MetaTable table; public weak string view_def; public bool is_updatable; } [CCode (cheader_filename = "libgda/libgda.h")] public struct Mutex : GLib.RecMutex { public static void free (Gda.Mutex mutex); public static void @lock (Gda.Mutex mutex); public static bool trylock (Gda.Mutex mutex); public static void unlock (Gda.Mutex mutex); } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct ProviderInfo { public weak string id; public weak string location; public weak string description; public weak Gda.Set dsn_params; public weak Gda.Set auth_params; } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct ServerOperationNode { public Gda.ServerOperationNodeType type; public Gda.ServerOperationNodeStatus status; public weak Gda.Set plist; public weak Gda.DataModel model; public weak Gda.Column column; public weak Gda.Holder param; } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct ServerProviderHandlerInfo { public weak Gda.Connection cnc; public GLib.Type g_type; public weak string dbms_type; } [CCode (cheader_filename = "libgda/libgda.h")] [SimpleType] public struct SqlBuilderId : uint { } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct SqlParserIface { public weak Gda.SqlParser parser; public weak Gda.SqlStatement parsed_statement; } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct SqlRenderingContext { public Gda.StatementSqlFlag flags; public weak Gda.Set @params; public weak GLib.SList params_used; public weak Gda.ServerProvider provider; public weak Gda.Connection cnc; public weak Gda.SqlRenderingValue render_value; } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct ThreadNotification { public Gda.ThreadNotificationType type; public uint job_id; } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct TransactionStatusEvent { public weak Gda.TransactionStatus trans; public Gda.TransactionStatusEventType type; public weak Gda.ConnectionEvent conn_event; [CCode (cname = "pl.svp_name")] public weak string pl_svp_name; [CCode (cname = "pl.sql")] public weak string pl_sql; [CCode (cname = "pl.sub_trans")] public weak Gda.TransactionStatus pl_sub_trans; } [CCode (cheader_filename = "libgda/libgda.h", has_type_id = false)] public struct XaTransactionId { public uint32 format; public ushort gtrid_length; public ushort bqual_length; [CCode (array_length = false, array_null_terminated = true)] public weak char[] data; public string to_string (); } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_BATCH_CONFLICTING_PARAMETER_", has_type_id = false)] public enum BatchError { [CCode (cname = "GDA_BATCH_CONFLICTING_PARAMETER_ERROR")] BATCH_CONFLICTING_PARAMETER_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_CONFIG_", has_type_id = false)] public enum ConfigError { DSN_NOT_FOUND_ERROR, PERMISSION_ERROR, PROVIDER_NOT_FOUND_ERROR, PROVIDER_CREATION_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_CONNECTION_", has_type_id = false)] public enum ConnectionError { DSN_NOT_FOUND_ERROR, PROVIDER_NOT_FOUND_ERROR, PROVIDER_ERROR, NO_CNC_SPEC_ERROR, NO_PROVIDER_SPEC_ERROR, OPEN_ERROR, STATEMENT_TYPE_ERROR, CANT_LOCK_ERROR, TASK_NOT_FOUND_ERROR, UNSUPPORTED_THREADS_ERROR, CLOSED_ERROR, META_DATA_CONTEXT_ERROR, UNSUPPORTED_ASYNC_EXEC_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_CONNECTION_EVENT_CODE_", has_type_id = false)] public enum ConnectionEventCode { CONSTRAINT_VIOLATION, RESTRICT_VIOLATION, NOT_NULL_VIOLATION, FOREIGN_KEY_VIOLATION, UNIQUE_VIOLATION, CHECK_VIOLATION, INSUFFICIENT_PRIVILEGES, UNDEFINED_COLUMN, UNDEFINED_FUNCTION, UNDEFINED_TABLE, DUPLICATE_COLUMN, DUPLICATE_DATABASE, DUPLICATE_FUNCTION, DUPLICATE_SCHEMA, DUPLICATE_TABLE, DUPLICATE_ALIAS, DUPLICATE_OBJECT, SYNTAX_ERROR, UNKNOWN } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_CONNECTION_EVENT_", has_type_id = false)] public enum ConnectionEventType { NOTICE, WARNING, ERROR, COMMAND } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_CONNECTION_FEATURE_", has_type_id = false)] public enum ConnectionFeature { AGGREGATES, BLOBS, INDEXES, INHERITANCE, NAMESPACES, PROCEDURES, SEQUENCES, SQL, TRANSACTIONS, SAVEPOINTS, SAVEPOINTS_REMOVE, TRIGGERS, UPDATABLE_CURSOR, USERS, VIEWS, XA_TRANSACTIONS, MULTI_THREADING, ASYNC_EXEC, LAST } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_CONNECTION_META_", has_type_id = false)] public enum ConnectionMetaType { NAMESPACES, TYPES, TABLES, VIEWS, FIELDS, INDEXES } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_CONNECTION_OPTIONS_", has_type_id = false)] [Flags] public enum ConnectionOptions { NONE, READ_ONLY, SQL_IDENTIFIERS_CASE_SENSITIVE, THREAD_SAFE, THREAD_ISOLATED, AUTO_META_DATA } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DATA_COMPARATOR_", has_type_id = false)] public enum DataComparatorError { MISSING_DATA_MODEL_ERROR, COLUMN_TYPES_MISMATCH_ERROR, MODEL_ACCESS_ERROR, USER_CANCELLED_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DATA_MODEL_ACCESS_", has_type_id = false)] [Flags] public enum DataModelAccessFlags { RANDOM, CURSOR_FORWARD, CURSOR_BACKWARD, CURSOR, INSERT, UPDATE, DELETE, WRITE } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DATA_MODEL_HINT_", has_type_id = false)] public enum DataModelHint { START_BATCH_UPDATE, END_BATCH_UPDATE, REFRESH } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DATA_MODEL_IO_", has_type_id = false)] public enum DataModelIOFormat { DATA_ARRAY_XML, TEXT_SEPARATED, TEXT_TABLE } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DATA_MODEL_ITER_COLUMN_OUT_OF_RANGE_", has_type_id = false)] public enum DataModelIterError { [CCode (cname = "GDA_DATA_MODEL_ITER_COLUMN_OUT_OF_RANGE_ERROR")] DATA_MODEL_ITER_COLUMN_OUT_OF_RANGE_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DATA_PIVOT_", has_type_id = false)] public enum DataPivotAggregate { AVG, COUNT, MAX, MIN, SUM } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DATA_PIVOT_", has_type_id = false)] public enum DataPivotError { INTERNAL_ERROR, SOURCE_MODEL_ERROR, FIELD_FORMAT_ERROR, USAGE_ERROR, OVERFLOW_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DATA_PIVOT_FIELD_", has_type_id = false)] public enum DataPivotFieldType { ROW, COLUMN } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DATA_PROXY_", has_type_id = false)] public enum DataProxyError { COMMIT_ERROR, COMMIT_CANCELLED, READ_ONLY_VALUE, READ_ONLY_ROW, FILTER_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DATA_SELECT_COND_", has_type_id = false)] public enum DataSelectConditionType { PK, ALL_COLUMNS } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DATA_SELECT_", has_type_id = false)] public enum DataSelectError { MODIFICATION_STATEMENT_ERROR, MISSING_MODIFICATION_STATEMENT_ERROR, CONNECTION_ERROR, ACCESS_ERROR, SQL_ERROR, SAFETY_LOCKED_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DIFF_", has_type_id = false)] public enum DiffType { ADD_ROW, REMOVE_ROW, MODIFY_ROW } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_HOLDER_", has_type_id = false)] public enum HolderError { STRING_CONVERSION_ERROR, VALUE_TYPE_ERROR, VALUE_NULL_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_LDAP_SEARCH_", has_type_id = false)] public enum LdapSearchScope { BASE, ONELEVEL, SUBTREE } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_META_DB_", has_type_id = false)] public enum MetaDbObjectType { UNKNOWN, TABLE, VIEW } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_META_FOREIGN_KEY_", has_type_id = false)] public enum MetaForeignKeyPolicy { UNKNOWN, NONE, NO_ACTION, RESTRICT, CASCADE, SET_NULL, SET_DEFAULT } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_META_GRAPH_", has_type_id = false)] [Flags] public enum MetaGraphInfo { [CCode (cname = "GDA_META_GRAPH_COLUMNS")] META_GRAPH_COLUMNS } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_META_SORT_", has_type_id = false)] public enum MetaSortType { ALHAPETICAL, DEPENDENCIES } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_META_STORE_", has_type_id = false)] public enum MetaStoreChangeType { ADD, REMOVE, MODIFY } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_META_STORE_", has_type_id = false)] public enum MetaStoreError { INCORRECT_SCHEMA_ERROR, UNSUPPORTED_PROVIDER_ERROR, INTERNAL_ERROR, META_CONTEXT_ERROR, MODIFY_CONTENTS_ERROR, EXTRACT_SQL_ERROR, ATTRIBUTE_NOT_FOUND_ERROR, ATTRIBUTE_ERROR, SCHEMA_OBJECT_NOT_FOUND_ERROR, SCHEMA_OBJECT_CONFLICT_ERROR, SCHEMA_OBJECT_DESCR_ERROR, TRANSACTION_ALREADY_STARTED_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_META_STRUCT_", has_type_id = false)] public enum MetaStructError { UNKNOWN_OBJECT_ERROR, DUPLICATE_OBJECT_ERROR, INCOHERENCE_ERROR, XML_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_META_STRUCT_FEATURE_", has_type_id = false)] [Flags] public enum MetaStructFeature { NONE, FOREIGN_KEYS, VIEW_DEPENDENCIES, ALL } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SERVER_OPERATION_CREATE_TABLE_", has_type_id = false)] [Flags] public enum ServerOperationCreateTableFlag { NOTHING_FLAG, PKEY_FLAG, NOT_NULL_FLAG, UNIQUE_FLAG, AUTOINC_FLAG, FKEY_FLAG, PKEY_AUTOINC_FLAG } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SERVER_OPERATION_", has_type_id = false)] public enum ServerOperationError { OBJECT_NAME_ERROR, INCORRECT_VALUE_ERROR, XML_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SERVER_OPERATION_STATUS_", has_type_id = false)] public enum ServerOperationNodeStatus { OPTIONAL, REQUIRED, UNKNOWN } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SERVER_OPERATION_NODE_", has_type_id = false)] public enum ServerOperationNodeType { PARAMLIST, DATA_MODEL, PARAM, SEQUENCE, SEQUENCE_ITEM, DATA_MODEL_COLUMN, UNKNOWN } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SERVER_OPERATION_", has_type_id = false)] public enum ServerOperationType { CREATE_DB, DROP_DB, CREATE_TABLE, DROP_TABLE, RENAME_TABLE, ADD_COLUMN, DROP_COLUMN, CREATE_INDEX, DROP_INDEX, CREATE_VIEW, DROP_VIEW, COMMENT_TABLE, COMMENT_COLUMN, CREATE_USER, ALTER_USER, DROP_USER, LAST } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SERVER_PROVIDER_", has_type_id = false)] public enum ServerProviderError { METHOD_NON_IMPLEMENTED_ERROR, PREPARE_STMT_ERROR, EMPTY_STMT_ERROR, MISSING_PARAM_ERROR, STATEMENT_EXEC_ERROR, OPERATION_ERROR, INTERNAL_ERROR, BUSY_ERROR, NON_SUPPORTED_ERROR, SERVER_VERSION_ERROR, DATA_ERROR, DEFAULT_VALUE_HANDLING_ERROR, MISUSE_ERROR, FILE_NOT_FOUND_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SET_", has_type_id = false)] public enum SetError { XML_SPEC_ERROR, HOLDER_NOT_FOUND_ERROR, INVALID_ERROR, READ_ONLY_ERROR, IMPLEMENTATION_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SQL_BUILDER_", has_type_id = false)] public enum SqlBuilderError { WRONG_TYPE_ERROR, MISUSE_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SQL_IDENTIFIERS_", has_type_id = false)] [Flags] public enum SqlIdentifierStyle { LOWER_CASE, UPPER_CASE } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SQL_OPERATOR_TYPE_", has_type_id = false)] public enum SqlOperatorType { AND, OR, EQ, IS, LIKE, BETWEEN, GT, LT, GEQ, LEQ, DIFF, REGEXP, REGEXP_CI, NOT_REGEXP, NOT_REGEXP_CI, SIMILAR, ISNULL, ISNOTNULL, NOT, IN, NOTIN, CONCAT, PLUS, MINUS, STAR, DIV, REM, BITAND, BITOR, BITNOT, ILIKE, NOTLIKE, NOTILIKE } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SQL_PARSER_", has_type_id = false)] public enum SqlParserError { SYNTAX_ERROR, OVERFLOW_ERROR, EMPTY_SQL_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SQL_PARSER_FLAVOUR_", has_type_id = false)] public enum SqlParserFlavour { STANDARD, SQLITE, MYSQL, ORACLE, POSTGRESQL } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SQL_PARSER_MODE_", has_type_id = false)] public enum SqlParserMode { PARSE, DELIMIT } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SQL_SELECT_JOIN_", has_type_id = false)] public enum SqlSelectJoinType { CROSS, NATURAL, INNER, LEFT, RIGHT, FULL; public static unowned string to_string (Gda.SqlSelectJoinType type); } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SQL_STATEMENT_COMPOUND_", has_type_id = false)] public enum SqlStatementCompoundType { UNION, UNION_ALL, INTERSECT, INTERSECT_ALL, EXCEPT, EXCEPT_ALL } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SQL_STATEMENT_", has_type_id = false)] public enum SqlStatementType { SELECT, INSERT, UPDATE, DELETE, COMPOUND, BEGIN, ROLLBACK, COMMIT, SAVEPOINT, ROLLBACK_SAVEPOINT, DELETE_SAVEPOINT, UNKNOWN, NONE } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_STATEMENT_", has_type_id = false)] public enum StatementError { PARSE_ERROR, SYNTAX_ERROR, NO_CNC_ERROR, CNC_CLOSED_ERROR, EXEC_ERROR, PARAM_TYPE_ERROR, PARAM_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_STATEMENT_MODEL_", has_type_id = false)] [Flags] public enum StatementModelUsage { RANDOM_ACCESS, CURSOR_FORWARD, CURSOR_BACKWARD, CURSOR, ALLOW_NOPARAM, OFFLINE } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_STATEMENT_SQL_", has_type_id = false)] [Flags] public enum StatementSqlFlag { PARAMS_AS_VALUES, PRETTY, PARAMS_LONG, PARAMS_SHORT, PARAMS_AS_COLON, PARAMS_AS_DOLLAR, PARAMS_AS_QMARK, PARAMS_AS_UQMARK, TIMEZONE_TO_GMT } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_THREAD_NOTIFICATION_", has_type_id = false)] public enum ThreadNotificationType { JOB, SIGNAL } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_THREAD_WRAPPER_UNKNOWN_", has_type_id = false)] public enum ThreadWrapperError { [CCode (cname = "GDA_THREAD_WRAPPER_UNKNOWN_ERROR")] THREAD_WRAPPER_UNKNOWN_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_TRANSACTION_ISOLATION_", has_type_id = false)] public enum TransactionIsolation { UNKNOWN, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_TRANSACTION_STATUS_EVENT_", has_type_id = false)] public enum TransactionStatusEventType { SAVEPOINT, SQL, SUB_TRANSACTION } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_TRANSACTION_STATUS_STATE_", has_type_id = false)] public enum TransactionStatusState { OK, FAILED } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_TREE_UNKNOWN_", has_type_id = false)] public enum TreeError { [CCode (cname = "GDA_TREE_UNKNOWN_ERROR")] TREE_UNKNOWN_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_TREE_MANAGER_UNKNOWN_", has_type_id = false)] public enum TreeManagerError { [CCode (cname = "GDA_TREE_MANAGER_UNKNOWN_ERROR")] TREE_MANAGER_UNKNOWN_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_TREE_NODE_UNKNOWN_", has_type_id = false)] public enum TreeNodeError { [CCode (cname = "GDA_TREE_NODE_UNKNOWN_ERROR")] TREE_NODE_UNKNOWN_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_VALUE_ATTR_", has_type_id = false)] [Flags] public enum ValueAttribute { NONE, IS_NULL, CAN_BE_NULL, IS_DEFAULT, CAN_BE_DEFAULT, IS_UNCHANGED, ACTIONS_SHOWN, DATA_NON_VALID, HAS_VALUE_ORIG, NO_MODIF, UNUSED } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_XA_TRANSACTION_", has_type_id = false)] public enum XaTransactionError { ALREADY_REGISTERED_ERROR, DTP_NOT_SUPPORTED_ERROR, CONNECTION_BRANCH_LENGTH_ERROR } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_DATA_MODEL_")] public errordomain DataModelError { ROW_OUT_OF_RANGE_ERROR, COLUMN_OUT_OF_RANGE_ERROR, VALUES_LIST_ERROR, VALUE_TYPE_ERROR, ROW_NOT_FOUND_ERROR, ACCESS_ERROR, FEATURE_NON_SUPPORTED_ERROR, FILE_EXIST_ERROR, XML_FORMAT_ERROR, TRUNCATED_ERROR, OTHER_ERROR; public static GLib.Quark quark (); } [CCode (cheader_filename = "libgda/libgda.h", cprefix = "GDA_SQL_")] public errordomain SqlError { STRUCTURE_CONTENTS_ERROR, MALFORMED_IDENTIFIER_ERROR, MISSING_IDENTIFIER_ERROR, VALIDATION_ERROR; public static GLib.Quark quark (); } [CCode (cheader_filename = "libgda/libgda.h", has_target = false)] public delegate void AttributesManagerFunc (string att_name, GLib.Value value, void* data); [CCode (cheader_filename = "libgda/libgda.h", has_target = false)] public delegate void AttributesManagerSignal (GLib.Object obj, string att_name, GLib.Value value, void* data); [CCode (cheader_filename = "libgda/libgda.h", has_target = false)] public delegate void ServerProviderAsyncCallback (Gda.ServerProvider provider, Gda.Connection cnc, uint task_id, bool result_status, GLib.Error error, void* data); [CCode (cheader_filename = "libgda/libgda.h", has_target = false)] public delegate void ServerProviderExecCallback (Gda.ServerProvider provider, Gda.Connection cnc, uint task_id, GLib.Object result_obj, GLib.Error error, void* data); [CCode (cheader_filename = "libgda/libgda.h", has_target = false)] public delegate string SqlRenderingValue (GLib.Value value, Gda.SqlRenderingContext context) throws GLib.Error; [CCode (cheader_filename = "libgda/libgda.h", has_target = false)] public delegate bool SqlReservedKeywordsFunc (string word); [CCode (cheader_filename = "libgda/libgda.h", has_target = false)] public delegate void ThreadWrapperCallback (Gda.ThreadWrapper wrapper, void* instance, string signame, int n_param_values, GLib.Value param_values, void* gda_reserved, void* data); [CCode (cheader_filename = "libgda/libgda.h", has_target = false)] public delegate void ThreadWrapperVoidFunc (void* arg) throws GLib.Error; [CCode (cheader_filename = "libgda/libgda.h", cname = "GDA_ATTRIBUTE_AUTO_INCREMENT")] public const string ATTRIBUTE_AUTO_INCREMENT; [CCode (cheader_filename = "libgda/libgda.h", cname = "GDA_ATTRIBUTE_DESCRIPTION")] public const string ATTRIBUTE_DESCRIPTION; [CCode (cheader_filename = "libgda/libgda.h", cname = "GDA_ATTRIBUTE_IS_DEFAULT")] public const string ATTRIBUTE_IS_DEFAULT; [CCode (cheader_filename = "libgda/libgda.h", cname = "GDA_ATTRIBUTE_NAME")] public const string ATTRIBUTE_NAME; [CCode (cheader_filename = "libgda/libgda.h", cname = "GDA_ATTRIBUTE_NUMERIC_PRECISION")] public const string ATTRIBUTE_NUMERIC_PRECISION; [CCode (cheader_filename = "libgda/libgda.h", cname = "GDA_ATTRIBUTE_NUMERIC_SCALE")] public const string ATTRIBUTE_NUMERIC_SCALE; [CCode (cheader_filename = "libgda/libgda.h", cname = "GDA_ATTRIBUTE_TREE_NODE_UNKNOWN_CHILDREN")] public const string ATTRIBUTE_TREE_NODE_UNKNOWN_CHILDREN; [CCode (cheader_filename = "libgda/libgda.h", cname = "GDA_EXTRA_AUTO_INCREMENT")] public const string EXTRA_AUTO_INCREMENT; [CCode (cheader_filename = "libgda/libgda.h", cname = "GDA_SQLSTATE_GENERAL_ERROR")] public const string SQLSTATE_GENERAL_ERROR; [CCode (cheader_filename = "libgda/libgda.h", cname = "GDA_SQLSTATE_NO_ERROR")] public const string SQLSTATE_NO_ERROR; [CCode (cheader_filename = "libgda/libgda.h", cname = "GDA_TIMEZONE_INVALID")] public const int TIMEZONE_INVALID; [CCode (cheader_filename = "libgda/libgda.h")] public static string alphanum_to_text (string text); [CCode (array_length = false, array_null_terminated = true, cheader_filename = "libgda/libgda.h")] public static string[] completion_list_get (Gda.Connection cnc, string sql, int start, int end); [CCode (cheader_filename = "libgda/libgda.h")] public static bool compute_dml_statements (Gda.Connection cnc, Gda.Statement select_stmt, bool require_pk, owned Gda.Statement? insert_stmt, owned Gda.Statement? update_stmt, owned Gda.Statement? delete_stmt) throws GLib.Error; [CCode (cheader_filename = "libgda/libgda.h")] public static unowned Gda.DataHandler data_handler_get_default (GLib.Type for_type); [CCode (cheader_filename = "libgda/libgda.h")] public static void dsn_split (string string, string out_dsn, string out_username, string out_password); [CCode (cheader_filename = "libgda/libgda.h")] public static GLib.Type g_type_from_string (string str); [CCode (cheader_filename = "libgda/libgda.h")] public static unowned string g_type_to_string (GLib.Type type); [CCode (cheader_filename = "libgda/libgda.h")] public static bool identifier_equal (string id1, string id2); [CCode (cheader_filename = "libgda/libgda.h")] public static uint identifier_hash (string id); [CCode (cheader_filename = "libgda/libgda.h")] public static void log_disable (); [CCode (cheader_filename = "libgda/libgda.h")] public static void log_enable (); [CCode (cheader_filename = "libgda/libgda.h")] public static bool log_is_enabled (); [CCode (cheader_filename = "libgda/libgda.h")] public static bool parse_formatted_date (GLib.Date gdate, string value, GLib.DateDMY first, GLib.DateDMY second, GLib.DateDMY third, char sep); [CCode (cheader_filename = "libgda/libgda.h")] public static bool parse_formatted_time (Gda.Time timegda, string value, char sep); [CCode (cheader_filename = "libgda/libgda.h")] public static bool parse_formatted_timestamp (Gda.Timestamp timestamp, string value, GLib.DateDMY first, GLib.DateDMY second, GLib.DateDMY third, char sep); [CCode (cheader_filename = "libgda/libgda.h")] public static bool parse_iso8601_date (GLib.Date gdate, string value); [CCode (cheader_filename = "libgda/libgda.h")] public static bool parse_iso8601_time (Gda.Time timegda, string value); [CCode (cheader_filename = "libgda/libgda.h")] public static bool parse_iso8601_timestamp (Gda.Timestamp timestamp, string value); [CCode (cheader_filename = "libgda/libgda.h")] public static bool rewrite_statement_for_null_parameters (Gda.Statement stmt, Gda.Set @params, owned Gda.Statement? out_stmt) throws GLib.Error; [CCode (cheader_filename = "libgda/libgda.h")] public static bool rfc1738_decode (string string); [CCode (cheader_filename = "libgda/libgda.h")] public static string rfc1738_encode (string string); [CCode (cheader_filename = "libgda/libgda.h")] public static Gda.Statement select_alter_select_for_empty (Gda.Statement stmt) throws GLib.Error; [CCode (cheader_filename = "libgda/libgda.h")] public static string sql_identifier_quote (string id, Gda.Connection? cnc, Gda.ServerProvider? prov, bool meta_store_convention, bool force_quotes); [CCode (array_length = false, array_null_terminated = true, cheader_filename = "libgda/libgda.h")] public static string[] sql_identifier_split (string id); [CCode (cheader_filename = "libgda/libgda.h")] public static Gda.SqlOperatorType sql_operation_operator_from_string (string op); [CCode (cheader_filename = "libgda/libgda.h")] public static unowned string sql_operation_operator_to_string (Gda.SqlOperatorType op); [CCode (cheader_filename = "libgda/libgda.h")] public static Gda.Binary string_to_binary (string? str); [CCode (cheader_filename = "libgda/libgda.h")] public static Gda.Blob string_to_blob (string str); [CCode (cheader_filename = "libgda/libgda.h")] public static string text_to_alphanum (string text); [CCode (cheader_filename = "libgda/libgda.h")] public static bool utility_check_data_model_v (Gda.DataModel model, [CCode (array_length_cname = "nbcols", array_length_pos = 1.5)] GLib.Type[] types); [CCode (cheader_filename = "libgda/libgda.h")] public static bool utility_data_model_dump_data_to_xml (Gda.DataModel model, [CCode (type = "xmlNodePtr")] Xml.Node* parent, [CCode (array_length_cname = "nb_cols", array_length_pos = 3.5)] int[]? cols, [CCode (array_length_cname = "nb_rows", array_length_pos = 4.5)] int[]? rows, bool use_col_ids); [CCode (cheader_filename = "libgda/libgda.h")] public static unowned string utility_data_model_find_column_description (Gda.DataSelect model, string field_name); [CCode (cheader_filename = "libgda/libgda.h")] public static bool utility_holder_load_attributes (Gda.Holder holder, [CCode (type = "xmlNodePtr")] Xml.Node* node, GLib.SList sources) throws GLib.Error; [CCode (cheader_filename = "libgda/libgda.h")] public static int value_compare (GLib.Value value1, GLib.Value value2); [CCode (cheader_filename = "libgda/libgda.h")] public static int value_differ (GLib.Value value1, GLib.Value value2); [CCode (cheader_filename = "libgda/libgda.h")] public static string value_stringify (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static GLib.Value? value_copy (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static void value_free (owned GLib.Value? value); [CCode (cheader_filename = "libgda/libgda.h")] public static bool value_is_null (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static bool value_is_number (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static GLib.Value? value_new_binary (owned uint8[] val); [CCode (cheader_filename = "libgda/libgda.h")] public static GLib.Value? value_new_blob (owned uint8[] val); [CCode (cheader_filename = "libgda/libgda.h")] public static GLib.Value? value_new_blob_from_file (string filename); [CCode (cheader_filename = "libgda/libgda.h")] public static unowned Gda.Binary value_get_binary (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static unowned Gda.Blob value_get_blob (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static void value_take_binary (GLib.Value value, owned Gda.Binary binary); [CCode (cheader_filename = "libgda/libgda.h")] public static void value_take_blob (GLib.Value value, owned Gda.Blob blob); [CCode (cheader_filename = "libgda/libgda.h")] public static void value_set_binary (GLib.Value value, Gda.Binary binary); [CCode (cheader_filename = "libgda/libgda.h")] public static void value_set_blob (GLib.Value value, Gda.Blob blob); [CCode (cheader_filename = "libgda/libgda.h")] public static bool value_set_from_string (GLib.Value value, string as_string, GLib.Type type); [CCode (cheader_filename = "libgda/libgda.h")] [Version (since = "4.2.9")] public static GLib.Value? value_new_default (string? default_val); [CCode (cheader_filename = "libgda/libgda.h")] public static GLib.Value? value_new_from_string (string as_string, GLib.Type type); [CCode (cheader_filename = "libgda/libgda.h")] public static GLib.Value? value_new_from_xml ([CCode (type = "const xmlNodePtr")] Xml.Node node); [CCode (cheader_filename = "libgda/libgda.h")] public static string value_to_xml (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static GLib.Value? value_new_null (); [CCode (cheader_filename = "libgda/libgda.h")] public static void value_set_null (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static void value_set_geometric_point (GLib.Value value, Gda.GeometricPoint val); [CCode (cheader_filename = "libgda/libgda.h")] public static unowned Gda.GeometricPoint value_get_geometric_point (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static void value_set_time (GLib.Value value, Gda.Time val); [CCode (cheader_filename = "libgda/libgda.h")] public static unowned Gda.Time value_get_time (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static void value_set_timestamp (GLib.Value value, Gda.Timestamp val); [CCode (cheader_filename = "libgda/libgda.h")] public static unowned Gda.Timestamp value_get_timestamp (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static unowned Gda.Numeric value_get_numeric (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static void value_set_numeric (GLib.Value value, Gda.Numeric val); [CCode (cheader_filename = "libgda/libgda.h")] public static short value_get_short (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static void value_set_short (GLib.Value value, short val); [CCode (cheader_filename = "libgda/libgda.h")] public static ushort value_get_ushort (GLib.Value value); [CCode (cheader_filename = "libgda/libgda.h")] public static void value_set_ushort (GLib.Value value, ushort val); } ellie-commons-sequeler-9963fb4/vapi/libssh2.vapi000066400000000000000000001656161512323162700216570ustar00rootroot00000000000000[CCode (cheader_filename = "libssh2.h>\ntypedef LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC((*libssh2_userauth_publickey_sign_delegate));\ntypedef LIBSSH2_IGNORE_FUNC((*libssh2_ignore_delegate));\ntypedef LIBSSH2_DEBUG_FUNC((*libssh2_debug_delegate));\ntypedef LIBSSH2_DISCONNECT_FUNC((*libssh2_disconnect_delegate));\ntypedef LIBSSH2_PASSWD_CHANGEREQ_FUNC((*libssh2_passwd_changereq_delegate));\ntypedef LIBSSH2_MACERROR_FUNC((*libssh2_macerror_delegate));\ntypedef LIBSSH2_X11_OPEN_FUNC((*libssh2_x11_open_delegate));\ntypedef LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC((*libssh2_userauth_kbdint_response_delegate));\ntypedef LIBSSH2_RECV_FUNC((*libssh2_recv_func_delegate));\ntypedef LIBSSH2_SEND_FUNC((*libssh2_send_func_delegate));\n#include { [CCode (cname = "libssh2_session_init_ex", simple_generics = true)] private static Session _create (void* alloc, void* free, void* realloc, void* user_data); public static Session create (T user_data = null) { return _create((void*) GLib.try_malloc, (void*) GLib.free, (void*) GLib.try_realloc, user_data); } public bool authenticated { [CCode (cname = "libssh2_userauth_authenticated")] get; } /** * The banner that will be sent to the remote host when the SSH session is started. * * This is optional; a banner corresponding to the protocol and libssh2 version will be sent by default. */ public string banner { [CCode (cname = "libssh2_session_banner_set")] set; [CCode (cname = "libssh2_session_banner_get")] get; } /** * The directions that socket should wait for before calling libssh2 function again */ public Direction block_directions { [CCode (cname = "libssh2_session_block_directions")] get; } public bool blocking { [CCode (cname = "libssh2_session_set_blocking")] set; [CCode (cname = "libssh2_session_get_blocking")] get; } public Error last_error { [CCode (cname = "libssh2_session_last_errno")] get; } public long timeout { [CCode (cname = "libssh2_session_set_timeout")] set; [CCode (cname = "libssh2_session_get_timeout")] get; } public unowned T userdata { get { return *access_abstract (); } set { *access_abstract () = value; } } [CCode (cname = "libssh2_hostkey_hash", array_length = false)] private unowned uint8[] _get_hostkey_hash (HashType type); [CCode (cname = "libssh2_session_callback_set", simple_generics = true)] private S _set_callback (CallbackType cbtype, S callback); /** * Return a pointer to where the abstract pointer provided is stored. * * By providing a doubly de-referenced pointer, the internal storage of the session instance may be modified in place. * @see userdata */ [CCode (cname = "libssh2_session_abstract", simple_generics = true)] public T * access_abstract (); /** * Authenticate a session with username and password * @see auth_password_ex */ [CCode (cname = "libssh2_userauth_password")] public Error auth_password (string username, string password); /** * Authenticate a session with username and password * * Attempt basic password authentication. Note that many SSH servers which appear to support ordinary password authentication actually have it disabled and use Keyboard Interactive authentication (routed via PAM or another authentication backed) instead. * @param username Name of user to attempt plain password authentication for. * @param password Password to use for authenticating username. * @param passwd_change_cb If the host accepts authentication but requests that the password be changed, this callback will be issued. If no callback is defined, but server required password change, authentication will fail. */ [CCode (cname = "libssh2_userauth_password_ex")] public Error auth_password_ex ([CCode (array_length_type = "unsigned int")] uint8[] username, [CCode (array_length_type = "unsigned int")] uint8[] password, ChangePasswdHandler? passwd_change_cb = null); /** * Authenticate using a callback function */ [CCode (cname = "libssh2_userauth_publickey")] public Error auth_publickey (string username, [CCode (array_length_type = "size_t")] uint8[] pubkeydata, PublicKeySignFunc sign_func); /** * Authenticate a session with a public key, read from a file * @see auth_publickey_from_file_ex */ [CCode (cname = "libssh2_userauth_publickey_fromfile")] public Error auth_publickey_from_file (string username, string publickey, string privatekey, string? passphrase); /** * Authenticate a session with a public key, read from a file * * Attempt public key authentication using a PEM encoded private key file stored on disk * @param username Remote user name to authenticate as. * @param publickey Path and name of public key file. (e.g., /etc/ssh/hostkey.pub) * @param privatekey Path and name of private key file. (e.g., /etc/ssh/hostkey) * @param passphrase Passphrase to use when decoding private key file. */ [CCode (cname = "libssh2_userauth_publickey_fromfile_ex")] public Error auth_publickey_from_file_ex ([CCode (array_length_type = "unsigned int")] uint8[] username, string publickey, string privatekey, string? passphrase); [CCode (cname = "libssh2_userauth_hostbased_fromfile")] public Error auth_host_based_from_file (string username, string publickey, string privatekey, string? passphrase, string hostname, string local_user_name); [CCode (cname = "libssh2_userauth_hostbased_fromfile_ex")] public Error auth_host_based_from_file_ex ([CCode (array_length_type = "unsigned int")] uint8[] username, string publickey, string privatekey, string? passphrase, [CCode (array_length_type = "unsigned int")] uint8[] hostname, [CCode (array_length_type = "unsigned int")] uint8[] local_user_name); /** * Authenticate a session using a challenge-response authentication * @see auth_keyboard_interactive_ex */ [CCode (cname = "libssh2_userauth_keyboard_interactive")] public Error auth_keyboard_interactive (string username, KeyboardInteractiveHandler reponse_callback); /** * Authenticate a session using a challenge-response authentication * * Note that many SSH servers will always issue single "password" challenge, requesting actual password as response, but it is not required by the protocol, and various authentication schemes, such as smartcard authentication may use keyboard-interactive authentication type too. * @param username Name of user to attempt plain password authentication for. * @param response_callback As authentication proceeds, host issues several (1 or more) challenges and requires responses. This callback will be called at this moment. Callback is responsible to obtain responses for the challenges, fill the provided data structure and then return control. Responses will be sent to the host. */ [CCode (cname = "libssh2_userauth_keyboard_interactive_ex")] public Error auth_keyboard_interactive_ex ([CCode (array_length_type = "unsigned int")] uint8[] username, KeyboardInteractiveHandler response_callback); [CCode (cname = "libssh2_agent_init")] public Agent? create_agent (); /** * Tunnel a TCP/IP connection through the SSH transport via the remote host to a third party. * * Communication from the client to the SSH server remains encrypted, communication from the server to the 3rd party host travels in cleartext. * @param host Third party host to connect to using the SSH host as a proxy. * @param port Port on third party host to connect to. * @param shost Host to tell the SSH server the connection originated on. * @param sport Port to tell the SSH server the connection originated from. */ [CCode (cname = "libssh2_channel_direct_tcpip_ex")] public Channel? direct_tcpip (string host, int port, string shost = "127.0.0.1", int sport = 22); /** * Disconnect by application. * @see disconnect_ex */ [CCode (cname = "libssh2_session_disconnect")] public Error disconnect (string description); /** * Send a disconnect message to the remote host associated with session, along with a reason symbol and a verbose description. * * @param description Human readable reason for disconnection. * @param lang Localization string describing the langauge/encoding of the description provided. */ [CCode (cname = "libssh2_session_disconnect_ex")] public Error disconnect_ex (Disconnect reason, string description, string lang); /** * Instruct the remote SSH server to begin listening for inbound TCP/IP connections. * @see forward_listen_ex */ [CCode (cname = "libssh2_channel_forward_listen")] public Listener? forward_listen (int port); /** * Instruct the remote SSH server to begin listening for inbound TCP/IP connections. * * New connections will be queued by the library until accepted. * @param host specific address to bind to on the remote host. Binding to 0.0.0.0 (default when null) will bind to all available addresses. * @param port port to bind to on the remote host. When 0 is passed, the remote host will select the first available dynamic port. * @param bound_port Populated with the actual port bound on the remote host. Useful when requesting dynamic port numbers. * @param queue_maxsize Maximum number of pending connections to queue before rejecting further attempts. */ [CCode (cname = "libssh2_channel_forward_listen_ex")] public Listener? forward_listen_ex (string? host, int port, out int bound_port, int queue_maxsize = 16); [CCode (cname = "libssh2_knownhost_init")] public KnownHosts? get_known_hosts (); /** * Determine the most recent error condition and its cause. */ [CCode (cname = "libssh2_session_last_error")] public Error get_last_error (out char[] errmsg, bool want_buf = true); /** * Returns the computed digest of the remote system's hostkey. The length of the returned string is hash-type specific (e.g., 16 bytes for MD5, 20 bytes for SHA1). */ public unowned uint8[]? get_host_key_hash (HashType type) { unowned uint8[]? hash = _get_hostkey_hash (type); if (hash == null) { return null; } switch (type) { case HashType.SHA1 : hash.length = 20; break; case HashType.MD5 : hash.length = 16; break; } return hash; } [CCode (cname = "libssh2_session_hostkey", array_length_type = "size_t", array_length_pos = 0.1)] public unowned uint8[] get_host_key (out KeyType type); /** * Returns the actual method negotiated for a particular transport parameter. * @return Negotiated method or null if the session has not yet been started. */ [CCode (cname = "libssh2_session_methods")] public unowned string get_methods (MethodType method_type); [CCode (cname = "libssh2_publickey_init")] public PublicKey? get_public_key (); [CCode (cname = "libssh2_sftp_init")] public SFTP? get_sftp (); [CCode (cname = "libssh2_session_supported_algs")] private int _supported_algs (MethodType method_type, out string[]? algs); public Error get_supported_algs (MethodType method_type, out string[]? algs) { var result = _supported_algs (method_type, out algs); if (result < 1) { return (Error) result; } else { ((!)algs).length = result; return Error.NONE; } } [CCode (cname = "libssh2_session_handshake")] public Error handshake (int sock); /** * List supported authentication methods * * Send a SSH_USERAUTH_NONE request to the remote host. Unless the remote host is configured to accept none as a viable authentication scheme (unlikely), it will return SSH_USERAUTH_FAILURE along with a listing of what authentication schemes it does support. In the unlikely event that none authentication succeeds, this method with return null. This case may be distinguished from a failing case by examining {@link authenticated} * @param username Username which will be used while authenticating. Note that most server implementations do not permit attempting authentication with different usernames between requests. Therefore this must be the same username you will use on later userauth calls. * @return On success a comma delimited list of supported authentication schemes. */ [CCode (cname = "libssh2_userauth_list")] public unowned string list_authentication ([CCode (array_length_type = "unsigned int")] uint8[] username); /** * Establish a generic session channel * @param channel_type Channel type to open. Typically one of session, directtcpip, or tcpipforward. The SSH2 protocol allowed for additional types including local, custom channel types. * @param window_size Maximum amount of unacknowledged data remote host is allowed to send before receiving an SSH_MSG_CHANNEL_WINDOW_ADJUST packet. * @param packet_size Maximum number of bytes remote host is allowed to send in a single SSH_MSG_CHANNEL_DATA or SSG_MSG_CHANNEL_EXTENDED_DATA packet. * @param message Additional data as required by the selected channel_type. * @see open_session * @see direct_tcpip * @see forward_listen */ [CCode (cname = "libssh2_channel_open_ex")] public Channel? open ([CCode (array_length_type = "unsigned int")] uint8[] channel_type, uint window_size = Channel.WINDOW_DEFAULT, uint packet_size = Channel.PACKET_DEFAULT, [CCode (array_length_type = "unsigned int")] uint8[]? message = null); [CCode (cname = "libssh2_channel_open_session")] public Channel? open_channel (); [CCode (cname = "libssh2_scp_recv")] public Channel? scp_recv (string path, out Posix.Stat sb); [CCode (cname = "libssh2_scp_send64")] public Channel? scp_send (string path, Posix.mode_t mode, int64 size, time_t mtime, time_t atime); /** * Send a keepalive message if needed. * * @param seconds_to_next indicates how many seconds you can sleep after * this call before you need to call it again. */ [CCode (cname = "libssh2_keepalive_send")] public Error send_keep_alive (out int seconds_to_next); /** * Set a handler when a SSH_MSG_DEBUG message is received * @param callback the handler, or null to ignore this message * @return the previous callback handler, if there was one. */ public DebugHandler? set_debug_handler (DebugHandler? callback) { return _set_callback? > (CallbackType.DEBUG, callback); } /** * Set a handler when a SSH_MSG_DISCONNECT message is received * @param callback the handler, or null to ignore this message * @return the previous callback handler, if there was one. */ public DisconnectHandler? set_disconnect_handler (DisconnectHandler? callback) { return _set_callback? > (CallbackType.DISCONNECT, callback); } [CCode (cname = "libssh2_session_flag")] public Error set_flag (Option option, bool @value); /** * Set a handler when a SSH_MSG_IGNORE message is received * @param callback the handler, or null to ignore this message * @return the previous callback handler, if there was one. */ public IgnoreHandler? set_ignore_handler (IgnoreHandler? callback) { return _set_callback? > (CallbackType.IGNORE, callback); } /** * Set how often keepalive messages should be sent. * * Note that non-blocking applications are responsible for sending the * keep-alive messages using {@link send_keep_alive}. * * @param want_reply indicates whether the keepalive messages should * request a response from the server. * @param interval is number of seconds that can pass without any I/O, use * 0 (the default) to disable keepalives. To avoid some busy-loop * corner-cases, if you specify an interval of 1 it will be treated as 2. */ [CCode (cname = "libssh2_keepalive_config")] public void set_keep_alive (bool want_reply, uint interval); /** * Set a handler when a mismatched MAC has been detected in the transport layer. * @param callback the handler, or null to ignore this message * @return the previous callback handler, if there was one. */ public MACErrorHandler? set_mac_error_handler (MACErrorHandler? callback) { return _set_callback? > (CallbackType.MACERROR, callback); } public SendHandler? set_send_handler (SendHandler? callback) { return _set_callback? > (CallbackType.SEND, callback); } public RecvHandler? set_recv_handler (RecvHandler? callback) { return _set_callback? > (CallbackType.RECV, callback); } /** * Set preferred methods to be negotiated. These preferrences must be set prior to calling {@link handshake} as they are used during the protocol initiation phase. * @param prefs Comma-delimited list of preferred methods to use with the most preferred listed first and the least preferred listed last. If a method is listed which is not supported by libssh2 it will be ignored and not sent to the remote host during protocol negotiation. */ [CCode (cname = "libssh2_session_method_pref")] public Error set_method_pref (MethodType method, string prefs); /** * Enables tracing. * * This has no function in builds that aren't built with debug enabled */ [CCode (cname = "libssh2_trace")] public Error set_trace (Trace trace); [CCode (cname = "libssh2_trace_sethandler", simple_generics = true)] public Error set_trace_handler ([CCode (target_pos = 0.1)] TraceFunc handler); /** * Set a handler when an X11 connection has been accepted * @param callback the handler, or null to ignore this message * @return the previous callback handler, if there was one. */ public X11Handler? set_x_handler (X11Handler? callback) { return _set_callback? > (CallbackType.X11, callback); } [CCode (cname = "int", cprefix = "LIBSSH2_CALLBACK_")] private enum CallbackType { IGNORE, DEBUG, DISCONNECT, MACERROR, X11, SEND, RECV } [CCode (cname = "libssh2_passwd_changereq_delegate", simple_generics = true, has_target = false)] public delegate void ChangePasswdHandler (Session session, out uint8[]? newpw, ref T user_data); [CCode (cname = "libssh2_debug_delegate", simple_generics = true, has_target = false)] public delegate void DebugHandler (Session session, bool always_display, uint8[] message, uint8[] language, ref T user_data); [CCode (cname = "libssh2_disconnect_delegate", simple_generics = true, has_target = false)] public delegate void DisconnectHandler (Session session, Disconnect reason, uint8[] message, uint8[] language, ref T user_data); [CCode (cname = "libssh2_ignore_delegate", simple_generics = true, has_target = false)] public delegate void IgnoreHandler (Session session, uint8[] message, ref T user_data); [CCode (cname = "libssh2_userauth_publickey_sign_delegate", simple_generics = true)] public delegate Error PublicKeySignFunc (Session session, [CCode (array_length_type = "size_t")] out uint8[] sig, [CCode (array_length_type = "size_t")] uint8[] data); [CCode (cname = "libssh2_userauth_kbdint_response_delegate", simple_generics = true, has_target = false)] public delegate void KeyboardInteractiveHandler ([CCode (array_length_type = "int")] uint8[] name, [CCode (array_length_type = "int")] uint8[] instruction, [CCode (array_length_pos = 2.1)] keyboard_prompt prompts, [CCode (array_length = false)] keyboard_response responses, ref T user_data); [CCode (cname = "libssh2_recv_func_delegate", simple_generics = true, has_target = false)] public delegate ssize_t RecvHandler (int socket, [CCode (array_length_type = "size_t")] uint8[] buffer, int flags, ref T user_data); [CCode (cname = "libssh2_send_func_delegate", simple_generics = true, has_target = false)] public delegate ssize_t SendHandler (int socket, [CCode (array_length_type = "size_t")] uint8[] buffer, int flags, ref T user_data); /** * Handler for mismatched MAC packets in transport layer. * @return true to discard. If false, the packet will be accepted nonetheless. */ [CCode (cname = "libssh2_macerror_delegate", simple_generics = true, has_target = false)] public delegate bool MACErrorHandler (Session session, uint8[] packet, ref T user_data); [CCode (cname = "libssh2_x11_open_delegate", simple_generics = true, has_target = false)] public delegate void X11Handler (Session session, Channel channel, string host, int port, ref T user_data); } [CCode (cname = "LIBSSH2_SFTP", free_function = "libssh2_sftp_shutdown", cheader_filename = "libssh2_sftp.h")] [Compact] public class SFTP { [CCode (cname = "LIBSSH2_SFTP_PACKET_MAXLEN", cheader_filename = "libssh2_sftp.h")] public const int PACKET_MAXLEN; /** * The last error code produced by the SFTP layer. * * Note that this only returns a sensible error code if libssh2 returned * {@link Error.SFTP_PROTOCOL} in a previous call. */ public SftpError last_error { [CCode (cname = "libssh2_sftp_last_error")] get; } /** * Get status of a link */ [CCode (cname = "libssh2_sftp_lstat")] public Error lstat (string path, out sftp_attributes attrs); /** * Create a directory on the remote file system * @param path full path of the new directory to create. Note that the new directory's parents must all exist priot to making this call. * @param mode directory creation mode (e.g. 0755). */ [CCode (cname = "libssh2_sftp_mkdir_ex")] public Error mkdir (string path, long mode); /** * Open filehandle for a file on SFTP. */ [CCode (cname = "libssh2_sftp_open")] public SftpHandle? open (string filename, Transfer flags, Posix.mode_t mode); /** * Open filehandle for a directory on SFTP. */ [CCode (cname = "libssh2_sftp_opendir")] public SftpHandle? open_dir (string path); /** * Resolve a symbolic link filesystem object to its next target. * * @return the number of bytes it copied to the target buffer (not including the terminating zero) or negative on failure. * @see Error */ [CCode (cname = "libssh2_sftp_readlink")] public int read_link (string path, [CCode (array_length_type = "unsigned int")] uint8[] target); /** * Resolve a complex, relative, or symlinked filepath to its effective target. * * @return the number of bytes it copied to the target buffer (not including the terminating zero) or negative on failure. * @see Error */ [CCode (cname = "libssh2_sftp_realpath")] public int real_path (string path, [CCode (array_length_type = "unsigned int")] uint8[] target); /** * Rename a filesystem object on the remote filesystem. * * Use expected flags. * @see rename_ex */ [CCode (cname = "libssh2_sftp_rename")] public Error rename (string source_file, string dest_file); /** * Rename a filesystem object on the remote filesystem. * * The semantics of this command typically include the ability to move a * filsystem object between folders and/or filesystem mounts. If the * {@link Rename.OVERWRITE} flag is not set and the destfile entry already * exists, the operation will fail. Use of the other two flags indicate * a preference (but not a requirement) for the remote end to perform an * atomic rename operation and/or using native system calls when possible. */ [CCode (cname = "libssh2_sftp_rename_ex")] public Error rename_ex ([CCode (array_length_type = "unsigned int")] uint8[] source_filename, [CCode (array_length_type = "unsigned int")] uint8[] dest_filename, Rename flags); /** * Remove a directory from the remote file system. */ [CCode (cname = "libssh2_sftp_rmdir")] public Error rmdir (string path); /** * Set status of a file */ [CCode (cname = "libssh2_sftp_setstat")] public Error set_stat (string path, sftp_attributes attrs); /** * Get status of a file */ [CCode (cname = "libssh2_sftp_stat")] public Error stat (string path, out sftp_attributes attrs); /** * Get file system statistics */ [CCode (cname = "libssh2_sftp_statvfs")] public Error stat_vfs ([CCode (array_length_type = "size_t")] uint8[] path, out stat_vfs st); /** * Create a symbolic link between two filesystem objects. */ [CCode (cname = "libssh2_sftp_symlink")] public Error symlink (string orig, string linkpath); /** * Unlink (delete) an SFTP file * @see unlink_ex */ [CCode (cname = "libssh2_sftp_unlink")] public Error unlink (string filename); /** * Unlink (delete) an SFTP file */ [CCode (cname = "libssh2_sftp_unlink_ex")] public Error unlink_ex ([CCode (array_length_type = "unsigned int")] uint8[] source_filename); } [CCode (cname = "LIBSSH2_SFTP_HANDLE", free_function = "libssh2_sftp_close_handle", cheader_filename = "libssh2_sftp.h")] [Compact] public class SftpHandle { /** * Reads a block of data. * * This method is modelled after the POSIX read(2) function and uses the * same calling semantics. It will attempt to read as much as possible * however it may not fill all of buffer if the file pointer reaches the * end or if further reads would cause the socket to block. * @return Number of bytes actually populated into buffer, or negative on * failure. It returns {@link Error.AGAIN} when * it would otherwise block.s */ [CCode (cname = "libssh2_sftp_read")] public ssize_t read ([CCode (array_length_size = "size_t")] uint8[] buffer); /** * Reads a block of data and returns file entry information for the * next entry, if any. * @param buffer a buffer to read data into. * @param longentry a buffer to read data into. The format of the is unspecified by SFTP protocol. It MUST be suitable for use in the output of a directory listing command (in fact, the recommended operation for a directory listing command is to simply display this data). * @return number of bytes actually populated into buffer (not counting the terminating zero), or negative on failure. It returns {@link Error.AGAIN} when it would otherwise block. */ [CCode (cname = "libssh2_sftp_readdir_ex")] public int read_dir ([CCode (array_length_size = "size_t")] uint8[] buffer, [CCode (array_length_size = "size_t")] uint8[]? longentry, sftp_attributes attrs); [CCode (cname = "libssh2_sftp_rewind")] public void rewind (); /** * Set the read/write position indicator within a file * * Move the file handle's internal pointer to an arbitrary location. Note * that libssh2 implements file pointers as a localized concept to make * file access appear more POSIX like. No packets are exchanged with the * server during a seek operation. The localized file pointer is simply * used as a convenience offset during read/write operations. */ [CCode (cname = "libssh2_sftp_seek64")] public void seek (uint64 offset); /** * Set attributes on an SFTP file handle */ [CCode (cname = "libssh2_sftp_fsetstat")] public Error set_stat (sftp_attributes attrs); /** * Get attributes on an SFTP file handle */ [CCode (cname = "libssh2_sftp_fstat")] public Error stat (out sftp_attributes attrs); /** * Get file system statistics */ [CCode (cname = "libssh2_sftp_fstatvfs")] public Error stat_vfs (out stat_vfs st); /** * Get the current read/write position indicator for a file */ [CCode (cname = "libssh2_sftp_tell64")] public uint64 tell (); /** * Writes a block of data to the SFTP server. * * This method is modeled after the POSIX write() function and uses the same calling semantics. * * As much as possible of the buffer and put it into a single SFTP * protocol packet. This means that to get maximum performance when sending * larger files, you should try to always pass in at least 32K of data to * this function. * * Starting in libssh2 version 1.2.8, the default behavior of libssh2 is to * create several smaller outgoing pack†ets for all data you pass to this * function and it will return a positive number as soon as the first * packet is acknowledged from the server. * * This has the effect that sometimes more data has been sent off but isn't * acked yet when this function returns, and when this function is * subsequently called again to write more data, libssh2 will immediately * figure out that the data is already received remotely. * * In most normal situation this should not cause any problems, but it * should be noted that if you've once called this method with data and it * returns short, you MUST still assume that the rest of the data might've * been cached so you need to make sure you don't alter that data and * think that the version you have in your next function invoke will be * detected or used. * * The reason for this funny behavior is that SFTP can only send 32K data * in each packet and it gets all packets acked individually. This * means we cannot use a simple serial approach if we want to reach high * performance even on high latency connections. And we want that. * * @return Actual number of bytes written or negative on failure. If this * function returns 0 (zero) it should not be considered an error, but * simply that there was no error but yet no payload data got sent to the * other end. */ [CCode (cname = "libssh2_sftp_write")] public ssize_t write ([CCode (array_length_size = "size_t")] uint8[] buffer); } [CCode (cname = "libssh2_publickey_attribute", has_type_id = false, cheader_filename = "libssh2_publickey.h")] public struct key_attribute { [CCode (cname = "libssh2_publickey_attribute")] public key_attribute (string name, string @value, bool mandatory); [CCode (array_length_cname = "name_len", array_length_type = "unsigned long")] unowned uint8[] name; [CCode (array_length_cname = "value_len", array_length_type = "unsigned long")] unowned uint8[] @value; bool mandatory; } [CCode (cname = "libssh2_publickey_list")] public struct key_list { [CCode (array_length_cname = "name_len", array_length_type = "unsigned long")] uint8[] name; [CCode (array_length_cname = "blob_len", array_length_type = "unsigned long")] uint8[] blob; [CCode (array_length_cname = "num_attrs", array_length_type = "unsigned long")] key_attribute[] attrs; } [CCode (cname = "LIBSSH2_USERAUTH_KBDINT_PROMPT")] public struct keyboard_prompt { [CCode (array_length_cname = "length")] public uint8[] text; public bool echo; } [CCode (cname = "LIBSSH2_USERAUTH_KBDINT_RESPONSE")] public struct keyboard_response { [CCode (array_length_type = "unsigned int", array_length_cname = "length")] public uint8[] text; } [CCode (cname = "LIBSSH2_SFTP_ATTRIBUTES", has_type_id = false, cheader_filename = "libssh2_sftp.h")] public struct sftp_attributes { /** * If flags contains an attribute, then the value in this * struct will be meaningful Otherwise it should be ignored */ Attribute flags; /** * Size of file in bytes */ uint64 filesize; /* * Numerical the user owner */ ulong uid; /* * Numerical the group owner */ ulong gid; Posix.mode_t permissions; /** * Access time of file */ ulong atime; /** * Modification time of file */ ulong mtime; } [CCode (cname = "LIBSSH2_SFTP_STATVFS", has_type_id = false, cheader_filename = "libssh2_sftp.h")] public struct stat_vfs { /** * File system block size */ [CCode (cname = "f_bsize")] uint64 block_size; /** * Fragment size */ [CCode (cname = "f_frsize")] uint64 frg_size; /** * Size of the file system in frg_size units */ [CCode (cname = "f_blocks")] uint64 blocks; /** * Number of free blocks */ [CCode (cname = "f_bfree")] uint64 blocks_free; /** * Number of free blocks for non-root */ [CCode (cname = "f_bavail")] uint64 blocks_avail; /** * Number of inodes */ [CCode (cname = "f_files")] uint64 files; /** * Number of free inodes */ [CCode (cname = "f_ffree")] uint64 inodes_free; /** * Number of free inodes for non-root */ [CCode (cname = "f_favail")] uint64 inodes_avail; /** * File system ID */ [CCode (cname = "f_fsid")] uint64 fs_id; /** * Mount flags */ [CCode (cname = "f_flag")] MountFlags flags; /** * Maximum filename length */ [CCode (cname = "f_namemax")] uint64 name_max; } [CCode (cname = "unsigned long", cprefix = "LIBSSH2_SFTP_ATTR_", cheader_filename = "libssh2_sftp.h")] public enum Attribute { SIZE, UIDGID, PERMISSIONS, ACMODTIME, EXTENDED } [CCode (cname = "int", cprefix = "LIBSSH2_KNOWNHOST_CHECK_", has_type_id = false)] public enum CheckResult { MATCH, MISMATCH, NOTFOUND, FAILURE } [CCode (cname = "int", cprefix = "LIBSSH2_SESSION_BLOCK_", has_type_id = false)] [Flags] public enum Direction { INBOUND, OUTBOUND; public GLib.IOCondition to_condition () { GLib.IOCondition result = 0; if (Direction.INBOUND in this) { result |= GLib.IOCondition.IN; } if (Direction.OUTBOUND in this) { result |= GLib.IOCondition.OUT; } return result; } } /** * Disconnect codes defined by SSH protocol */ [CCode (cname = "int", cprefix = "SSH_DISCONNECT_", has_type_id = false)] public enum Disconnect { HOST_NOT_ALLOWED_TO_CONNECT, PROTOCOL_ERROR, KEY_EXCHANGE_FAILED, RESERVED, MAC_ERROR, COMPRESSION_ERROR, SERVICE_NOT_AVAILABLE, PROTOCOL_VERSION_NOT_SUPPORTED, HOST_KEY_NOT_VERIFIABLE, CONNECTION_LOST, BY_APPLICATION, TOO_MANY_CONNECTIONS, AUTH_CANCELLED_BY_USER, NO_MORE_AUTH_METHODS_AVAILABLE, ILLEGAL_USER_NAME } [CCode (cname = "int", cprefix = "LIBSSH2_ERROR_", has_type_id = false)] public enum Error { NONE, SOCKET_NONE, BANNER_RECV, BANNER_SEND, INVALID_MAC, KEX_FAILURE, ALLOC, SOCKET_SEND, KEY_EXCHANGE_FAILURE, TIMEOUT, HOSTKEY_INIT, HOSTKEY_SIGN, DECRYPT, SOCKET_DISCONNECT, PROTO, PASSWORD_EXPIRED, FILE, METHOD_NONE, AUTHENTICATION_FAILED, PUBLICKEY_UNVERIFIED, CHANNEL_OUTOFORDER, CHANNEL_FAILURE, CHANNEL_REQUEST_DENIED, CHANNEL_UNKNOWN, CHANNEL_WINDOW_EXCEEDED, CHANNEL_PACKET_EXCEEDED, CHANNEL_CLOSED, CHANNEL_EOF_SENT, SCP_PROTOCOL, ZLIB, SOCKET_TIMEOUT, SFTP_PROTOCOL, REQUEST_DENIED, METHOD_NOT_SUPPORTED, INVAL, INVALID_POLL_TYPE, PUBLICKEY_PROTOCOL, [CCode (cname = "LIBSSH2_ERROR_EAGAIN")] AGAIN, BUFFER_TOO_SMALL, BAD_USE, COMPRESS, OUT_OF_BOUNDARY, AGENT_PROTOCOL, SOCKET_RECV, ENCRYPT, BAD_SOCKET, KNOWN_HOSTS } [CCode (cname = "int", cprefix = "LIBSSH2_CHANNEL_EXTENDED_DATA_", has_type_id = false)] public enum ExtendedData { /** * Queue extended data for eventual reading */ NORMAL, /** * Treat extended data and ordinary data the same. Merge all substreams such that calls to {@link Channel.read} will pull from all substreams on a first-in/first-out basis. */ MERGE, /** * Discard all extended data as it arrives. */ IGNORE } [CCode (cname = "int", cprefix = "LIBSSH2_HOSTKEY_HASH_", has_type_id = false)] public enum HashType { MD5, SHA1 } [CCode (cname = "int", cprefix = "LIBSSH2_KNOWNHOST_")] [Flags] public enum HostFormat { TYPE_MASK, /** * ASCII "hostname.domain.tld" */ TYPE_PLAIN, /** * SHA1( ) base64-encoded! */ TYPE_SHA1, /** * Another hash */ TYPE_CUSTOM, KEYENC_MASK, KEYENC_RAW, KEYENC_BASE64, KEY_MASK, KEY_SHIFT, KEY_RSA1, KEY_SSHRSA, KEY_SSHDSS } [CCode (cname = "int", cprefix = "LIBSSH2_INIT_", has_type_id = false)] [Flags] public enum InitFlags { [CCode (cname = "0")] NONE, /** * Do not initialize the crypto library (i.e., OPENSSL_add_cipher_algoritms() for OpenSSL */ NO_CRYPTO } [CCode (cname = "int", cprefix = "LIBSSH2_HOSTKEY_TYPE_", has_type_id = false)] public enum KeyType { UNKNOWN, RSA, DSS; public HostFormat get_format () { switch (this) { case RSA: return HostFormat.KEY_SSHRSA; case DSS: return HostFormat.KEY_SSHDSS; default: return 0; } } } [CCode (cname = "int", cprefix = "SSH_METHOD_", has_type_id = false)] public enum MethodType { KEX, HOSTKEY, CRYPT_CS, CRYPT_SC, MAC_CS, MAC_SC, COMP_CS, COMP_SC, LANG_CS, LANG_SC } [CCode (cname = "unsigned long", cprefix = "LIBSSH2_SFTP_ST_", cheader_filename = "libssh2_sftp.h")] [Flags] public enum MountFlags { RDONLY, NOSUID } [CCode (cname = "int", cprefix = "LIBSSH2_FLAG_", has_type_id = false)] public enum Option { /** * Do not attempt to block SIGPIPEs but will let them trigger from the underlying socket layer. */ SIGPIPE, /** * Before the connection negotiation is performed, try to negotiate compression enabling for this connection. * * By default libssh2 will not attempt to use compression. */ COMPRESS } [CCode (cname = "long", cprefix = "LIBSSH2_SFTP_RENAME_", cheader_filename = "libssh2_sftp.h")] [Flags] public enum Rename { OVERWRITE, ATOMIC, NATIVE } /** * SFTP Status Codes */ [CCode (cname = "unsigned long", has_type_id = false, cprefix = "LIBSSH2_FX_", cheader_filename = "libssh2_sftp.h")] public enum SftpError { OK, EOF, NO_SUCH_FILE, PERMISSION_DENIED, FAILURE, BAD_MESSAGE, NO_CONNECTION, CONNECTION_LOST, OP_UNSUPPORTED, INVALID_HANDLE, NO_SUCH_PATH, FILE_ALREADY_EXISTS, WRITE_PROTECT, NO_MEDIA, NO_SPACE_ON_FILESYSTEM, QUOTA_EXCEEDED, UNKNOWN_PRINCIPAL, LOCK_CONFLICT, DIR_NOT_EMPTY, NOT_A_DIRECTORY, INVALID_FILENAME, LINK_LOOP } [CCode (cname = "int", cprefix = "LIBSSH2_TRACE_", has_type_id = false)] [Flags] public enum Trace { TRANS, KEX, AUTH, CONN, SCP, SFTP, ERROR, PUBLICKEY, SOCKET } /** * File Transfer Flags */ [CCode (cname = "unsigned long", has_type_id = false, cprefix = "LIBSSH2_FXF_", cheader_filename = "libssh2_sftp.h")] [Flags] public enum Transfer { /** * Open the file for reading. */ READ, /** * Open the file for writing. If both this and {@link READ} are specified, the file is opened for both reading and writing. */ WRITE, /** * Force all writes to append data at the end of the file. * * This doesn't have any effect on OpenSSH servers */ APPEND, /** * A new file will be created if one does not already exist (if {@link TRUNC} is specified, the new file will be truncated to zero length if it previously exists) */ CREAT, /** * Forces an existing file with the same name to be truncated to zero length when creating a file by specifying {@link CREAT}. {@link CREAT} MUST also be specified if this flag is used. */ TRUNC, /** * Causes the request to fail if the named file already exists. {@link CREAT} MUST also be specified if this flag is used. */ EXCL } /** * Initialize the libssh2 functions. * * This typically initialize the crypto library. It uses a global state, and * is not thread safe -- you must make sure this function is not called * concurrently. * Returns 0 if succeeded, or a negative value for error. */ [CCode (cname = "libssh2_init")] public Error init (InitFlags flags); /** * Exit the libssh2 functions and free's all memory used internal. */ [CCode (cname = "libssh2_exit")] public void exit (); [CCode (cname = "libssh2_trace_handler_func*", instance_pos = 1.1, simple_generics = true)] public delegate void TraceFunc (Session session, [CCode (array_length_type = "size_t")] uint8[] message); /** * Part of every banner, user specified or not */ [CCode (cname = "LIBSSH2_SSH_BANNER")] public const string BANNER; [CCode (cname = "LIBSSH2_SSH_DEFAULT_BANNER")] public const string DEFAULT_BANNER; [CCode (cname = "LIBSSH2_SSH_DEFAULT_BANNER_WITH_CRLF")] public const string DEFAULT_BANNER_WITH_CRLF; [CCode (cname = "LIBSSH2_TERM_HEIGHT")] public const int TERM_HEIGHT; [CCode (cname = "LIBSSH2_TERM_HEIGHT_PX")] public const int TERM_HEIGHT_PX; [CCode (cname = "LIBSSH2_TERM_WIDTH")] public const int TERM_WIDTH; [CCode (cname = "LIBSSH2_TERM_WIDTH_PX")] public const int TERM_WIDTH_PX; } ellie-commons-sequeler-9963fb4/vapi/linux.vapi000066400000000000000000005207311512323162700214410ustar00rootroot00000000000000/* linux.vapi * * Copyright (C) 2009-2015 Michael 'Mickey' Lauer * * 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 */ [CCode (cprefix = "", lower_case_cprefix = "")] namespace Linux { /* * Console */ [CCode (cprefix = "", lower_case_cprefix = "")] namespace Console { /* constants */ [CCode (cheader_filename = "linux/kd.h")] public const int GIO_FONT; [CCode (cheader_filename = "linux/kd.h")] public const int PIO_FONT; [CCode (cheader_filename = "linux/kd.h")] public const int GIO_FONTX; [CCode (cheader_filename = "linux/kd.h")] public const int PIO_FONTX; [CCode (cheader_filename = "linux/kd.h")] public const int PIO_FONTRESET; [CCode (cheader_filename = "linux/kd.h")] public const int GIO_CMAP; [CCode (cheader_filename = "linux/kd.h")] public const int PIO_CMAP; [CCode (cheader_filename = "linux/kd.h")] public const int KIOCSOUND; [CCode (cheader_filename = "linux/kd.h")] public const int KDMKTONE; [CCode (cheader_filename = "linux/kd.h")] public const int KDGETLED; [CCode (cheader_filename = "linux/kd.h")] public const int KDSETLED; [CCode (cheader_filename = "linux/kd.h")] public const int KDGKBTYPE; [CCode (cheader_filename = "linux/kd.h")] public const int KB_84; [CCode (cheader_filename = "linux/kd.h")] public const int KB_101; [CCode (cheader_filename = "linux/kd.h")] public const int KB_OTHER; [CCode (cheader_filename = "linux/kd.h")] public const int KDADDIO; [CCode (cheader_filename = "linux/kd.h")] public const int KDDELIO; [CCode (cheader_filename = "linux/kd.h")] public const int KDENABIO; [CCode (cheader_filename = "linux/kd.h")] public const int KDDISABIO; [CCode (cheader_filename = "linux/kd.h")] public const int KDSETMODE; [CCode (cheader_filename = "linux/kd.h")] public const int KDGETMODE; [CCode (cheader_filename = "linux/kd.h")] public const int KDMAPDISP; [CCode (cheader_filename = "linux/kd.h")] public const int KDUNMAPDISP; [CCode (cheader_filename = "linux/kd.h")] public const int E_TABSZ; [CCode (cheader_filename = "linux/kd.h")] public const int GIO_SCRNMAP; [CCode (cheader_filename = "linux/kd.h")] public const int PIO_SCRNMAP; [CCode (cheader_filename = "linux/kd.h")] public const int GIO_UNISCRNMAP; [CCode (cheader_filename = "linux/kd.h")] public const int PIO_UNISCRNMAP; [CCode (cheader_filename = "linux/kd.h")] public const int GIO_UNIMAP; [CCode (cheader_filename = "linux/kd.h")] public const int PIO_UNIMAP; [CCode (cheader_filename = "linux/kd.h")] public const int PIO_UNIMAPCLR; [CCode (cheader_filename = "linux/kd.h")] public const int UNI_DIRECT_BASE; [CCode (cheader_filename = "linux/kd.h")] public const int UNI_DIRECT_MASK; [CCode (cheader_filename = "linux/kd.h")] public const int KDGKBMODE; [CCode (cheader_filename = "linux/kd.h")] public const int KDSKBMODE; [CCode (cheader_filename = "linux/kd.h")] public const int KDGKBMETA; [CCode (cheader_filename = "linux/kd.h")] public const int KDSKBMETA; [CCode (cheader_filename = "linux/kd.h")] public const int KDGKBLED; [CCode (cheader_filename = "linux/kd.h")] public const int KDSKBLED; [CCode (cheader_filename = "linux/kd.h")] public const int K_NORMTAB; [CCode (cheader_filename = "linux/kd.h")] public const int K_SHIFTTAB; [CCode (cheader_filename = "linux/kd.h")] public const int K_ALTTAB; [CCode (cheader_filename = "linux/kd.h")] public const int K_ALTSHIFTTAB; [CCode (cheader_filename = "linux/kd.h")] public const int KDGKBSENT; [CCode (cheader_filename = "linux/kd.h")] public const int KDSKBSENT; [CCode (cheader_filename = "linux/kd.h")] public const int KDGKBDIACR; [CCode (cheader_filename = "linux/kd.h")] public const int KDSKBDIACR; [CCode (cheader_filename = "linux/kd.h")] public const int KDGKBDIACRUC; [CCode (cheader_filename = "linux/kd.h")] public const int KDSKBDIACRUC; [CCode (cheader_filename = "linux/kd.h")] public const int KDGETKEYCODE; [CCode (cheader_filename = "linux/kd.h")] public const int KDSETKEYCODE; [CCode (cheader_filename = "linux/kd.h")] public const int KDSIGACCEPT; [CCode (cheader_filename = "linux/kd.h")] public const int KDKBDREP; [CCode (cheader_filename = "linux/kd.h")] public const int KDFONTOP; [CCode (cheader_filename = "linux/kd.h")] public const int KD_FONT_FLAG_DONT_RECALC; /* enums */ [CCode (cprefix = "KD_FONT_OP_", has_type_id = false, cheader_filename = "linux/kd.h")] public enum FontOperationCode { SET, GET, SET_DEFAULT, COPY } [CCode (cprefix = "K_", has_type_id = false, cheader_filename = "linux/kd.h")] public enum KeyboardMode { RAW, XLATE, MEDIUMRAW, UNICODE } [CCode (cprefix = "K_", has_type_id = false, cheader_filename = "linux/kd.h")] public enum LedMode { SCROLLLOCK, NUMLOCK, CAPSLOCK } [CCode (cprefix = "LED_", has_type_id = false, cheader_filename = "linux/kd.h")] public enum LedType { SCR, NUM, CAP } [CCode (cprefix = "KD_", has_type_id = false, cheader_filename = "linux/kd.h")] public enum TerminalMode { TEXT, GRAPHICS } [CCode (cprefix = "K_", has_type_id = false, cheader_filename = "linux/kd.h")] public enum MetaMode { METABIT, ESCPREFIX } /* structs */ [CCode (cname = "struct kbdiacr", has_type_id = false, cheader_filename = "linux/kd.h")] public struct Diacritic { public uchar diacr; public uchar base; public uchar result; } [CCode (cname = "struct kbdiacrs", has_type_id = false, cheader_filename = "linux/kd.h")] public struct Diacritics { public uint kb_cnt; public Diacritic kbdiacr[256]; } [CCode (cname = "struct kbdiacruc", has_type_id = false, cheader_filename = "linux/kd.h")] public struct Diacruc { public uint diacr; public uint base; public uint result; } [CCode (cname = "struct kbdiacrsuc", has_type_id = false, cheader_filename = "linux/kd.h")] public struct Diacrucs { public uint kb_cnt; public Diacruc kbdiacruc[256]; } [CCode (cname = "struct console_font", has_type_id = false, cheader_filename = "linux/kd.h")] public struct Font { public uint width; public uint height; public uint charcount; public uchar* data; } [CCode (cname = "struct consolefontdesc", has_type_id = false, cheader_filename = "linux/kd.h")] public struct FontDescription { public uint16 charcount; public uint16 charheight; public string chardata; } [CCode (cname = "struct console_font_op", has_type_id = false, cheader_filename = "linux/kd.h")] public struct FontOperation { public FontOperationCode op; public uint flags; public uint width; public uint height; public uint charcount; public uchar* data; } [CCode (cname = "struct kbkeycode", has_type_id = false, cheader_filename = "linux/kd.h")] public struct KeyCode { public uint scancode; public uint keycode; } [CCode (cname = "struct kbentry", has_type_id = false, cheader_filename = "linux/kd.h")] public struct KeyboardEntry { public uchar kb_table; public uchar kb_index; public uint16 kb_value; } [CCode (cname = "struct kbsentry", has_type_id = false, cheader_filename = "linux/kd.h")] public struct KeyboardEntries { public uchar kb_func; public uchar kb_string[512]; } [CCode (cname = "struct kbd_repeat", has_type_id = false, cheader_filename = "linux/kd.h")] public struct KeyRepeat { public int delay; public int period; } [CCode (cname = "struct unipair", has_type_id = false, cheader_filename = "linux/kd.h")] public struct UniPair { public uint16 unicode; public uint16 fontpos; } [CCode (cname = "struct unimapdesc", has_type_id = false, cheader_filename = "linux/kd.h")] public struct UniMapDesc { public uint16 entry_ct; UniPair entries; } [CCode (cname = "struct unimapinit", has_type_id = false, cheader_filename = "linux/kd.h")] public struct UniMapInit { public uint16 advised_hashsize; public uint16 advised_hashstep; public uint16 advised_hashlevel; } } /* * EventFd */ [CCode (cprefix = "EFD_", has_type_id = false, cheader_filename = "sys/eventfd.h")] public enum EventFdFlags { CLOEXEC, NONBLOCK } [CCode (cheader_filename = "sys/eventfd.h")] public int eventfd (uint count = 0, EventFdFlags flags = 0); public int eventfd_read (int fd, out uint64 value); public int eventfd_write (int fd, uint64 value); /* * Epoll */ [CCode (cprefix = "EPOLL_", has_type_id = false, cheader_filename = "sys/epoll.h")] public enum EpollFdFlags { CLOEXEC, } [CCode (cheader_filename = "sys/epoll.h", has_type_id = false, cname = "union epoll_data")] public struct EpollData { public void* ptr; public int fd; public uint32 u32; public uint64 u64; } [CCode (cheader_filename = "sys/epoll.h", has_type_id = false, cname = "struct epoll_event")] public struct EpollEvent { public uint32 events; public EpollData data; } [CCode (cheader_filename = "sys/epoll.h")] public int epoll_create (int size = 0); [CCode (cheader_filename = "sys/epoll.h")] public int epoll_create1 (int flags = 0); [CCode (cheader_filename = "sys/epoll.h")] public int epoll_wait (int epfd, EpollEvent[] events, int timeout); [CCode (cheader_filename = "sys/epoll.h")] public int epoll_pwait (int epfd, EpollEvent[] events, Posix.sigset_t? sigmask, int timeout); [CCode (cheader_filename = "sys/epoll.h")] public int epoll_ctl (int epfd, int op, int fd, EpollEvent? ev); [CCode (cheader_filename = "sys/epoll.h")] public const int EPOLLIN; [CCode (cheader_filename = "sys/epoll.h")] public const int EPOLLOUT; [CCode (cheader_filename = "sys/epoll.h")] public const int EPOLLERR; [CCode (cheader_filename = "sys/epoll.h")] public const int EPOLLHUP; [CCode (cheader_filename = "sys/epoll.h")] public const int EPOLLET; [CCode (cheader_filename = "sys/epoll.h")] public const int EPOLL_CTL_ADD; [CCode (cheader_filename = "sys/epoll.h")] public const int EPOLL_CTL_MOD; [CCode (cheader_filename = "sys/epoll.h")] public const int EPOLL_CTL_DEL; /* * Framebuffer */ [CCode (cprefix = "", lower_case_cprefix = "")] namespace Framebuffer { /* ioctls */ [CCode (cheader_filename = "linux/fb.h")] public const int FBIOGET_VSCREENINFO; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOPUT_VSCREENINFO; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOGET_FSCREENINFO; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOGETCMAP; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOPUTCMAP; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOPAN_DISPLAY; [CCode (cheader_filename = "linux/fb.h")] public const int FBIO_CURSOR; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOGET_MONITORSPEC; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOPUT_MONITORSPEC; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOSWITCH_MONIBIT; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOGET_CON2FBMAP; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOPUT_CON2FBMAP; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOBLANK; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOGET_VBLANK; [CCode (cheader_filename = "linux/fb.h")] public const int FBIO_ALLOC; [CCode (cheader_filename = "linux/fb.h")] public const int FBIO_FREE; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOGET_GLYPH; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOGET_HWCINFO; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOPUT_MODEINFO; [CCode (cheader_filename = "linux/fb.h")] public const int FBIOGET_DISPINFO; /* enums */ [CCode (cname = "guint32", cprefix = "FB_TYPE_", has_type_id = false, cheader_filename = "linux/fb.h")] public enum Type { PACKED_PIXELS, PLANES, INTERLEAVED_PLANES, TEXT, VGA_PLANES } [CCode (cname = "guint32", cprefix = "FB_ACTIVATE_", has_type_id = false, cheader_filename = "linux/fb.h")] public enum Activate { NOW, NXTOPEN, TEST, MASK, VBL, [CCode (cname = "FB_CHANGE_CMAP_VBL")] CHANGE_CMAP_VBL, ALL, FORCE, INV_MODE } [CCode (cname = "guint32", cprefix = "FB_ACCEL_", has_type_id = false, cheader_filename = "linux/fb.h")] public enum Accel { NONE } [CCode (cname = "guint32", cprefix = "FB_AUX_", has_type_id = false, cheader_filename = "linux/fb.h")] public enum Aux { TEXT_MDA, TEXT_CGA, TEXT_S3_MMIO, TEXT_MGA_STEP16, TEXT_MGA_STEP8, TEXT_SVGA_GROUP, TEXT_SVGA_MASK, TEXT_SVGA_STEP2, TEXT_SVGA_STEP4, TEXT_SVGA_STEP8, TEXT_SVGA_STEP16, TEXT_SVGA_LAST, VGA_PLANES_VGA4, VGA_PLANES_CFB4, VGA_PLANES_CFB8 } [CCode (cprefix = "FB_BLANK_", has_type_id = false, cheader_filename = "linux/fb.h")] public enum Blank { UNBLANK, NORMAL, VSYNC_SUSPEND, HSYNC_SUSPEND, POWERDOWN } [CCode (cprefix = "FB_CUR_", has_type_id = false, cheader_filename = "linux/fb.h")] public enum Cur { SETIMAGE, SETPOS, SETHOT, SETCMAP, SETSHAPE, SETSIZE, SETALL } [CCode (cname = "guint32", cprefix = "ROP_", has_type_id = false, cheader_filename = "linux/fb.h")] public enum Rop { COPY, XOR } [CCode (cprefix = "FB_ROTATE_", has_type_id = false, cheader_filename = "linux/fb.h")] public enum Rotate { UR, CW, UD, CCW } [CCode (cname = "guint32", cprefix = "FB_SYNC_", has_type_id = false, cheader_filename = "linux/fb.h")] public enum Sync { HOR_HIGH_ACT, VERT_HIGH_ACT, EXT, COMP_HIGH_ACT, BROADCAST, ON_GREEN } [CCode (cname = "guint32", cprefix = "FB_VISUAL_", has_type_id = false, cheader_filename = "linux/fb.h")] public enum Visual { MONO01, MONO10, TRUECOLOR, PSEUDOCOLOR, DIRECTCOLOR, STATIC_PSEUDOCOLOR } [CCode (cname = "guint32", cprefix = "FB_VMODE_", has_type_id = false, cheader_filename = "linux/fb.h")] public enum Vmode { NONINTERLACED, INTERLACED, DOUBLE, ODD_FLD_FIRST, MASK, YWRAP, SMOOTH_XPAN, CONUPDATE } /* structures */ [CCode (cname = "struct fb_bitfield", has_type_id = false, cheader_filename = "linux/fb.h")] public struct BitField { public uint32 offset; public uint32 length; public uint32 msb_right; } [CCode (cname = "struct fb_cmap", has_type_id = false, cheader_filename = "linux/fb.h")] public struct Cmap { public uint32 start; public uint32 len; public uint16* red; public uint16* green; public uint16* blue; public uint16* transp; } [CCode (cname = "struct fb_con2fbmap", has_type_id = false, cheader_filename = "linux/fb.h")] public struct Con2FbMap { public uint32 console; public uint32 framebuffer; } [CCode (cname = "struct fbcurpos", has_type_id = false, cheader_filename = "linux/fb.h")] public struct CurPos { public uint16 x; public uint16 y; } [CCode (cname = "struct fb_cursor", has_type_id = false, cheader_filename = "linux/fb.h")] public struct Cursor { public uint16 set; public uint16 enable; public uint16 rop; string mask; public CurPos hot; public Image image; } [CCode (cname = "struct fb_copyarea", has_type_id = false, cheader_filename = "linux/fb.h")] public struct CopyArea { public uint32 dx; public uint32 dy; public uint32 width; public uint32 height; public uint32 sx; public uint32 sy; } [CCode (cname = "struct fb_fillrect", has_type_id = false, cheader_filename = "linux/fb.h")] public struct FillRect { public uint32 dx; public uint32 dy; public uint32 width; public uint32 height; public uint32 color; public Rop rop; } [CCode (cname = "struct fb_image", has_type_id = false, cheader_filename = "linux/fb.h")] public struct Image { public uint32 dx; public uint32 dy; public uint32 width; public uint32 height; public uint32 fg_color; public uint32 bg_color; public uint8 depth; public char* data; public Cmap cmap; } [CCode (cname = "struct fb_fix_screeninfo", has_type_id = false, cheader_filename = "linux/fb.h")] public struct FixScreenInfo { public char id[16]; public long smem_start; public uint32 smem_len; public Type type; public Aux type_aux; public Visual visual; public uint16 xpanstep; public uint16 ypanstep; public uint16 ywrapstep; public uint32 line_length; public long mmio_start; public uint32 mmio_len; public Accel accel; } [CCode (cname = "struct fb_var_screeninfo", has_type_id = false, cheader_filename = "linux/fb.h")] public struct VarScreenInfo { public uint32 xres; public uint32 yres; public uint32 xres_virtual; public uint32 yres_virtual; public uint32 xoffset; public uint32 yoffset; public uint32 bits_per_pixel; public uint32 grayscale; public BitField red; public BitField green; public BitField blue; public BitField transp; public uint32 nonstd; public Activate activate; public uint32 height; public uint32 width; public uint32 pixclock; public uint32 left_margin; public uint32 right_margin; public uint32 upper_margin; public uint32 lower_margin; public uint32 hsync_len; public uint32 vsync_len; public Sync sync; public Vmode vmode; public uint32 rotate; } [CCode (cname = "struct fb_vblank", has_type_id = false, cheader_filename = "linux/fb.h")] public struct Vblank { public uint32 flags; public uint32 count; public uint32 vcount; public uint32 hcount; } [CCode (lower_case_cprefix = "omapfb_", has_type_id = false, cheader_filename = "linux/omapfb.h")] namespace OMAP { [CCode (cname = "int", has_type_id = false, cprefix = "OMAPFB_")] public enum IOCTL { MIRROR, SYNC_GFX, VSYNC, SET_UPDATE_MODE, GET_CAPS, GET_UPDATE_MODE, LCD_TEST, CTRL_TEST, UPDATE_WINDOW_OLD, SET_COLOR_KEY, GET_COLOR_KEY, SETUP_PLANE, QUERY_PLANE, UPDATE_WINDOW, SETUP_MEM, QUERY_MEM, WAITFORVSYNC, MEMORY_READ, GET_OVERLAY_COLORMODE, WAITFORGO, GET_VRAM_INFO, SET_TEARSYNC } [Flags, CCode (cname = "int", has_type_id = false, prefix = "OMAPFB_CAPS_")] public enum Caps { GENERIC_MASK, LCDC_MASK, PANEL_MASK, MANUAL_UPDATE, TEARSYNC, PLANE_RELOCATE_MEM, PLANE_SCALE, WINDOW_PIXEL_DOUBLE, WINDOW_SCALE, WINDOW_OVERLAY, WINDOW_ROTATE, SET_BACKLIGHT, } [Flags, CCode (cname = "int", has_type_id = false, cprefix = "OMAPFB_FORMAT_FLAG_")] public enum Format { [CCode (cname = "OMAPFB_FORMAT_MASK")] MASK, DOUBLE, TEARSYNC, FORCE_VSYNC, ENABLE_OVERLAY, DISABLE_OVERLAY } [CCode (cname = "int", has_type_id = false, cprefix = "OMAPFB_MEMTYPE_")] public enum MemType { SDRAM, SRAM, MAX } [CCode (cname = "enum omapfb_color_format", has_type_id = false, cprefix = "OMAPFB_COLOR_")] public enum ColorFormat { RGB565, YUV422, YUV420, CLUT_8BPP, CLUT_4BPP, CLUT_2BPP, CLUT_1BPP, RGB444, YUY422, ARGB16, RGB24U, RGB24P, ARGB32, RGBA32, RGBX32, } [CCode (cname = "omapfb_update_window", has_type_id = false)] public struct UpdateWindow { public uint32 x; public uint32 y; public uint32 width; public uint32 height; public uint32 format; public uint32 out_x; public uint32 out_y; public uint32 out_width; public uint32 out_height; } [CCode (cname = "enum omapfb_plane", has_type_id = false, cprefix = "OMAPFB_PLANE_")] public enum Plane { GFX, VID1, VID2 } [CCode (cname = "enum omapfb_channel_out", has_type_id = false, cprefix = "OMAPFB_CHANNEL_OUT_")] public enum ChannelOut { LCD, DIGIT } [CCode (cname = "struct omapfb_plane_info", has_type_id = false)] public struct PlaneInfo { public uint32 pos_x; public uint32 pos_y; public uint8 enabled; public uint8 channel_out; public uint8 mirror; public uint32 out_width; public uint32 out_height; } [CCode (cname = "struct omapfb_mem_info", has_type_id = false)] public struct MemInfo { public uint32 size; public uint8 type; } [CCode (cname = "struct omapfb_caps", has_type_id = false)] public struct Capabilities { public uint32 ctrl; public uint32 plane_color; public uint32 wnd_color; } [CCode (cname = "enum omapfb_color_key_type", has_type_id = false, cprefix = "OMAPFB_COLOR_KEY_")] public enum ColorKeyType { DISABLED, GFX_DST, VID_SRC } [CCode (cname = "struct omapfb_color_key", has_type_id = false)] public struct ColorKey { public uint8 channel_out; public uint32 background; public uint32 trans_key; public uint8 key_type; } [CCode (cname = "enum omapfb_update_mode", has_type_id = false)] public enum UpdateMode { [CCode (cname = "OMAPFB_UPDATE_DISABLED")] DISABLED, [CCode (cname = "OMAPFB_AUTO_UPDATE")] AUTO, [CCode (cname = "OMAPFB_MANUAL_UPDATE")] MANUAL } [CCode (cname = "struct omapfb_memory_read", has_type_id = false)] public struct MemoryRead { public uint16 x; public uint16 y; public uint16 w; public uint16 h; public size_t buffer_size; public void* buffer; } [CCode (cname = "struct omapfb_ovl_colormode", has_type_id = false)] public struct OvlColorMode { public uint8 overlay_idx; public uint8 mode_idx; public uint32 bits_per_pixel; public uint32 nonstd; public Framebuffer.BitField red; public Framebuffer.BitField green; public Framebuffer.BitField blue; public Framebuffer.BitField transp; } [CCode (cname = "struct omapfb_vram_info", has_type_id = false)] public struct VRamInfo { public uint32 total; public uint32 free; public uint32 largest_free_block; } [CCode (cname = "struct omapfb_tearsync_info", has_type_id = false)] public struct TearSyncInfo { public uint8 enabled; public uint16 line; } } } // Non-Posix file control constants, -D _GNU_SOURCE [CCode (cheader_filename = "fcntl.h", feature_test_macro = "_GNU_SOURCE")] public const int O_DIRECT; [CCode (cheader_filename = "fcntl.h", feature_test_macro = "_GNU_SOURCE")] public const int O_NOATIME; [CCode (cheader_filename = "fcntl.h", feature_test_macro = "_GNU_SOURCE")] public const int O_PATH; [CCode (cheader_filename = "fcntl.h", feature_test_macro = "_GNU_SOURCE")] public const int O_TMPFILE; /* * Gsm */ namespace Gsm { [CCode (cname = "GSMIOC_GETCONF", cheader_filename = "linux/gsmmux.h")] public const int GSMIOC_GETCONF; [CCode (cname = "GSMIOC_SETCONF", cheader_filename = "linux/gsmmux.h")] public const int GSMIOC_SETCONF; [CCode (cname = "struct gsm_config", has_type_id = false, cheader_filename = "linux/gsmmux.h")] public struct Config { public uint adaption; public uint encapsulation; public uint initiator; public uint t1; public uint t2; public uint t3; public uint n2; public uint mru; public uint mtu; public uint k; public uint i; } } /* * I2C and System Management Bus */ [CCode (cprefix = "I2C_", lower_case_cprefix = "i2c_")] namespace I2C { const int SLAVE; [CCode (cprefix = "", lower_case_cprefix = "i2c_smbus_")] namespace SMBUS { int32 write_byte_data_masked (int file, uint8 mask, uint8 command, uint8 value) { int32 result = read_byte_data (file, command); if (result == -1) { return -1; } uint8 oldvalue = (uint8) result & 0xff; return write_byte_data (file, command, oldvalue | (value & mask) ); } //[CCode (cheader_filename = "i2c.h")] //int32 access(int file, char read_write, uint8 command, int size, union data *data); [CCode (cheader_filename = "i2c.h")] int32 write_quick (int file, uint8 value); [CCode (cheader_filename = "i2c.h")] int32 read_byte (int file); [CCode (cheader_filename = "i2c.h")] int32 write_byte (int file, uint8 value); [CCode (cheader_filename = "i2c.h")] int32 read_byte_data (int file, uint8 command); [CCode (cheader_filename = "i2c.h")] int32 write_byte_data (int file, uint8 command, uint8 value); [CCode (cheader_filename = "i2c.h")] int32 read_word_data (int file, uint8 command); [CCode (cheader_filename = "i2c.h")] int32 write_word_data (int file, uint8 command, uint16 value); [CCode (cheader_filename = "i2c.h")] int32 process_call (int file, uint8 command, uint16 value); [CCode (cheader_filename = "i2c.h")] int32 read_block_data (int file, uint8 command, [CCode (array_length=false)] uint8[] values); [CCode (cheader_filename = "i2c.h")] int32 write_block_data (int file, uint8 command, [CCode (array_length_pos = 2.3)] uint8[] values); [CCode (cheader_filename = "i2c.h")] int32 read_i2c_block_data (int file, uint8 command, [CCode (array_length_pos = 2.3)] uint8[] values); [CCode (cheader_filename = "i2c.h")] int32 write_i2c_block_data (int file, uint8 command, [CCode (array_length_pos = 2.3)] uint8[] values); [CCode (cheader_filename = "i2c.h")] int32 block_process_call (int file, uint8 command, [CCode (array_length_pos = 2.3)] uint8[] values); } } /* * Inotify */ [CCode (cname = "struct inotify_event", has_type_id = false, cheader_filename = "sys/inotify.h")] public struct InotifyEvent { public int wd; public uint32 mask; public uint32 cookie; public uint32 len; public string name; } [Flags, CCode (cname = "int", cprefix = "IN_", has_type_id = false, cheader_filename = "sys/inotify.h")] public enum InotifyFlags { CLOEXEC, NONBLOCK } [Flags, CCode (cname = "int", cprefix = "IN_", has_type_id = false, cheader_filename = "sys/inotify.h")] public enum InotifyMaskFlags { ACCESS, ATTRIB, CLOSE, CLOSE_WRITE, CLOSE_NOWRITE, CREATE, DELETE, DELETE_SELF, MODIFY, MOVE, MOVE_SELF, MOVED_FROM, MOVED_TO, OPEN, DONT_FOLLOW, MASK_ADD, ONESHOT, ONLYDIR, IGNORED, ISDIR, Q_OVERFLOW, UNMOUNT } [CCode (cname = "inotify_init1", cheader_filename = "sys/inotify.h")] public int inotify_init (InotifyFlags flags = 0); public int inotify_add_watch (int fd, string pathname, InotifyMaskFlags mask); public int inotify_rm_watch (int fd, int wd); /* * RfKill */ [CCode (cname = "struct rfkill_event", has_type_id = false, cheader_filename = "linux/rfkill.h")] public struct RfKillEvent { public uint32 idx; public RfKillType type; public RfKillOp op; public uint8 soft; public uint8 hard; } [CCode (cname = "guint8", cprefix = "RFKILL_OP_", has_type_id = false, cheader_filename = "linux/rfkill.h")] public enum RfKillOp { ADD, DEL, CHANGE, CHANGE_ALL } [CCode (cname = "guint8", cprefix = "RFKILL_STATE_", has_type_id = false, cheader_filename = "linux/rfkill.h")] public enum RfKillState { SOFT_BLOCKED, UNBLOCKED, HARD_BLOCKED } [CCode (cname = "guint8", cprefix = "RFKILL_TYPE_", has_type_id = false, cheader_filename = "linux/rfkill.h")] public enum RfKillType { ALL, WLAN, BLUETOOTH, UWB, WIMAX, WWAN, GPS, FM, NFC } /* * SignalFd */ [CCode (cprefix = "SFD_", has_type_id = false, cheader_filename = "sys/signalfd.h")] public enum SignalFdFlags { CLOEXEC, NONBLOCK } [CCode (cheader_filename = "sys/signalfd.h")] public int signalfd (int fd, Posix.sigset_t mask, SignalFdFlags flags = 0); /* * Misc non-posix additions */ [CCode (cheader_filename = "dirent.h", has_type_id = false)] public enum DirEntType { DT_UNKNOWN, DT_FIFO, DT_CHR, DT_DIR, DT_BLK, DT_REG, DT_LNK, DT_SOCK, DT_WHT } [CCode (cheader_filename = "errno.h", feature_test_macro = "_GNU_SOURCE")] public const string program_invocation_name; [CCode (cheader_filename = "errno.h", feature_test_macro = "_GNU_SOURCE")] public const string program_invocation_short_name; [Version (deprecated_since = "vala-0.26", replacement = "Backtrace.get"), CCode (cheader_filename = "execinfo.h")] public int backtrace (void* buffer, int size); [Version (deprecated_since = "vala-0.26", replacement = "Backtrace.symbols"), CCode (cheader_filename = "execinfo.h", array_length = false)] public (unowned string)[]? backtrace_symbols (void* buffer, int size); [Version (deprecated_since = "vala-0.26", replacement = "Backtrace.symbols_fd"), CCode (cheader_filename = "execinfo.h")] public void backtrace_symbols_fd (void* buffer, int size, int fd); namespace Backtrace { [CCode (cname = "backtrace", cheader_filename = "execinfo.h")] public int @get (void*[] buffer); [CCode (cname = "backtrace_symbols", cheader_filename = "execinfo.h", array_length = false)] private (unowned string)[]? _symbols (void*[] buffer); [CCode (cname = "_vala_backtrace_symbols")] public (unowned string)[]? symbols (void*[] buffer) { (unowned string)[]? s = _symbols (buffer); s.length = buffer.length; return s; } [CCode (cheader_filename = "execinfo.h")] public void symbols_fd (void*[] buffer, int fd); } [CCode (cheader_filename = "signal.h")] public void psiginfo (Posix.siginfo_t pinfo, string message); [CCode (cheader_filename = "unistd.h", feature_test_macro = "_GNU_SOURCE")] public int dup3 (int oldfd, int newfd, int flags); [CCode (cheader_filename = "sys/types.h,unistd.h")] public int getgroups ([CCode (array_length_pos = 0.9)] Posix.gid_t[]? list = null); [CCode (cheader_filename = "unistd.h", feature_test_macro = "_GNU_SOURCE")] public int getresgid (out Posix.gid_t rgid, out Posix.gid_t egid, out Posix.gid_t sgid); [CCode (cheader_filename = "unistd.h", feature_test_macro = "_GNU_SOURCE")] public int getresuid (out Posix.uid_t ruid, out Posix.uid_t euid, out Posix.uid_t suid); [CCode (cheader_filename = "sys/types.h,grp.h,unistd.h")] public int setgroups ([CCode (array_length_pos = 0.9)] Posix.gid_t[] list); [CCode (cheader_filename = "unistd.h", feature_test_macro = "_GNU_SOURCE")] public int setresgid (Posix.gid_t rgid, Posix.gid_t egid, Posix.gid_t sgid); [CCode (cheader_filename = "unistd.h", feature_test_macro = "_GNU_SOURCE")] public int setresuid (Posix.uid_t ruid, Posix.uid_t euid, Posix.uid_t suid); [CCode (cheader_filename = "unistd.h")] public int sethostname (string name, size_t len); // additional sysconf(3) constants [CCode (cheader_filename = "unistd.h")] public const int _SC_PHYS_PAGES; [CCode (cheader_filename = "unistd.h")] public const int _SC_AVPHYS_PAGES; [CCode (cheader_filename = "unistd.h")] public const int _SC_NPROCESSORS_CONF; [CCode (cheader_filename = "unistd.h")] public const int _SC_NPROCESSORS_ONLN; [CCode (cheader_filename = "arpa/inet.h")] public int inet_aton (string cp, out Posix.InAddr addr); [CCode (cheader_filename = "sys/ioctl.h", sentinel = "")] public int ioctl (int fd, int request, ...); [CCode (cname = "makedev", cheader_filename = "sys/types.h")] public Posix.dev_t makedev (int maj, int min); [CCode (cname = "major", cheader_filename = "sys/types.h")] public int major (Posix.dev_t dev); [CCode (cname = "minor", cheader_filename = "sys/types.h")] public int minor (Posix.dev_t dev); [CCode (cname = "unsigned long int", cprefix = "MS_", has_type_id = false, cheader_filename = "sys/mount.h,linux/fs.h")] public enum MountFlags { RDONLY, NOSUID, NODEV, NOEXEC, SYNCHRONOUS, REMOUNT, MANDLOCK, DIRSYNC, NOATIME, NODIRATIME, BIND, MOVE, REC, SILENT, POSIXACL, UNBINDABLE, PRIVATE, SLAVE, SHARED, RELATIME, KERNMOUNT, I_VERSION, STRICTATIME, BORN, ACTIVE, NOUSER } [CCode (cname = "int", cprefix = "MNT_", has_type_id = false, cheader_filename = "sys/mount.h")] public enum UnmountFlags { FORCE, /* Force unmounting. */ DETACH, /* Just detach from the tree. */ EXPIRE /* Mark for expiry. */ } [CCode (cheader_filename = "sys/mount.h")] public int mount (string source, string target, string filesystemtype, MountFlags flags = 0, string options = ""); [CCode (cheader_filename = "sys/mount.h")] public int umount (string target); [CCode (cheader_filename = "sys/mount.h")] public int umount2 (string target, UnmountFlags flags); [CCode (cname = "struct winsize", has_type_id = false, cheader_filename = "termios.h", destroy_function = "")] public struct winsize { public ushort ws_row; public ushort ws_col; public ushort ws_xpixel; public ushort ws_ypixel; } [CCode (cheader_filename = "pty.h")] public Posix.pid_t forkpty (out int amaster, [CCode (array_length=false, array_null_terminated=true)] char[] name, Posix.termios? termp, winsize? winp); [CCode (cheader_filename = "pty.h")] public int openpty (out int amaster, out int aslave, [CCode (array_length=false, array_null_terminated=true)] char[] name, Posix.termios? termp, winsize? winp); [CCode (cprefix = "RB_", has_type_id = false, cheader_filename = "unistd.h,sys/reboot.h")] public enum RebootCommands { AUTOBOOT, HALT_SYSTEM, ENABLE_CAD, DISABLE_CAD, POWER_OFF } [CCode (cheader_filename = "unistd.h,sys/reboot.h")] public int reboot (RebootCommands cmd); [CCode (cprefix = "CLONE_", has_type_id = false, cheader_filename = "sched.h")] public enum CloneFlags { FILES, FS, NEWNS } [CCode (cheader_filename = "sched.h")] public int unshare (CloneFlags flags); [CCode (cheader_filename = "sys/time.h")] public int adjtime (Posix.timeval delta, Posix.timeval? olddelta = null); // adjtimex(2) [CCode (cprefix = "ADJ_", has_type_id = false, cheader_filename = "sys/timex.h")] public enum AdjustModes { OFFSET, FREQUENCY, MAXERROR, ESTERROR, STATUS, TIMECONST, TICK, OFFSET_SINGLESHOT } [CCode (cheader_filename = "sys/timex.h")] public const int TIME_OK; [CCode (cheader_filename = "sys/timex.h")] public const int TIME_INS; [CCode (cheader_filename = "sys/timex.h")] public const int TIME_DEL; [CCode (cheader_filename = "sys/timex.h")] public const int TIME_OOP; [CCode (cheader_filename = "sys/timex.h")] public const int TIME_WAIT; [CCode (cheader_filename = "sys/timex.h")] public const int TIME_BAD; // adjtimex(2) [CCode (cname = "struct timex", has_type_id = false, cheader_filename = "sys/timex.h")] public struct timex { public AdjustModes modes; /* mode selector */ public long offset; /* time offset (usec) */ public long freq; /* frequency offset (scaled ppm) */ public long maxerror; /* maximum error (usec) */ public long esterror; /* estimated error (usec) */ public int status; /* clock command/status */ public long constant; /* pll time constant */ public long precision; /* clock precision (usec) (read-only) */ public long tolerance; /* clock frequency tolerance (ppm) (read-only) */ public Posix.timeval time; /* current time (read-only) */ public long tick; /* usecs between clock ticks */ } [CCode (cheader_filename = "sys/timex.h")] public int adjtimex (Linux.timex buf); [CCode (cheader_filename = "time.h")] public time_t timegm (GLib.Time t); [CCode (cheader_filename = "time.h")] public const Posix.clockid_t CLOCK_MONOTONIC_RAW; [CCode (cheader_filename = "utmp.h")] public int login_tty (int fd); // emulate gettid(2) for which no glib wrapper exists via syscall public Posix.pid_t gettid() { return (Posix.pid_t) syscall( SysCall.gettid ); } // syscall(2) [CCode (cprefix = "SYS_", has_type_id = false, cname = "int")] public enum SysCall { gettid } [CCode (cname = "syscall", cheader_filename = "unistd.h,sys/syscall.h")] public int syscall (int number, ...); // mremap(2) [CCode (cprefix = "MREMAP_", has_type_id = false, cheader_filename = "sys/mman.h")] public enum MremapFlags { MAYMOVE, FIXED } [CCode (cheader_filename = "sys/mman.h")] public void *mremap (void *old_address, size_t old_size, size_t new_size, MremapFlags flags); /* * Network */ [CCode (cprefix = "", lower_case_cprefix = "")] namespace Network { // interface consts, structs, and methods [CCode (cname = "IFNAMSIZ", cheader_filename = "sys/socket.h,linux/if.h")] public const int INTERFACE_NAME_SIZE; [CCode (cheader_filename = "net/if.h")] public uint if_nametoindex (string ifname); [CCode (cheader_filename = "net/if.h")] public unowned string if_indextoname (uint ifindex, string ifname); [CCode (cheader_filename = "net/if.h")] public IfNameindex if_nameindex (); [CCode (cname = "int", cprefix = "IFF_", has_type_id = false, cheader_filename = "sys/socket.h,linux/if.h")] public enum IfFlag { UP, BROADCAST, DEBUG, LOOPBACK, POINTOPOINT, NOTRAILERS, RUNNING, NOARP, PROMISC, ALLMULTI, MASTER, SLAVE, PORTSEL, AUTOMEDIA, DYNAMIC } [CCode (cname = "struct if_nameindex", has_type_id = false, cheader_filename = "sys/socket.h,linux/if.h", destroy_function = "if_freenameindex")] public struct IfNameindex { public uint if_index; public string if_name; } [CCode (cname = "struct ifmap", has_type_id = false, cheader_filename = "sys/socket.h,linux/if.h", destroy_function = "")] public struct IfMap { public ulong mem_start; public ulong mem_end; public short base_addr; public uchar irq; public uchar dma; public uchar port; } [CCode (cname = "struct ifreq", has_type_id = false, cheader_filename = "netinet/in.h,linux/if.h", destroy_function = "")] public struct IfReq { [CCode (array_length = false)] public char[] ifr_name; public Posix.SockAddr ifr_addr; public Posix.SockAddr ifr_dstaddr; public Posix.SockAddr ifr_broadaddr; public Posix.SockAddr ifr_netmask; public Posix.SockAddr ifr_hwaddr; public short ifr_flags; public int ifr_metric; public int ifr_mtu; public IfMap ifr_map; public char[] ifr_slave; public string ifr_data; public int ifr_ifindex; public int ifr_bandwidth; public int ifr_qlen; public char[] ifr_newname; } [CCode (cname = "struct ifconf", has_type_id = false, cheader_filename = "sys/socket.h,linux/if.h", destroy_function = "")] public struct IfConf { public int ifc_len; public string ifc_buf; public IfReq ifc_req; } [CCode (cname = "struct ifaddrmsg", has_type_id = false, cheader_filename = "linux/if_addr.h", destroy_function = "")] public struct IfAddrMsg { public uint8 ifa_family; public uint8 ifa_prefixlen; public uint8 ifa_flags; public uint8 ifa_scope; public uint32 ifa_index; } [Compact, CCode (cname = "struct ifaddrs", cheader_filename = "sys/types.h,ifaddrs.h", free_function = "freeifaddrs", has_type_id = false)] public class IfAddrs { public unowned IfAddrs? ifa_next; public string ifa_name; public uint ifa_flags; public Posix.SockAddr? ifa_addr; public Posix.SockAddr? ifa_netmask; [CCode (cname = "ifa_ifu.ifu_broadaddr")] public Posix.SockAddr? ifa_ifu_broadaddr; [CCode (cname = "ifa_ifu.ifu_dstaddr")] public Posix.SockAddr? ifa_ifu_dstaddr; public void* ifa_data; } [CCode (cname = "getifaddrs")] public static int getifaddrs (out IfAddrs ifap); [CCode (cprefix = "IFA_", has_type_id = false, cheader_filename = "linux/if_addr.h")] public enum IfAddrType { UNSPEC, ADDRESS, LOCAL, LABEL, BROADCAST, ANYCAST, CACHEINFO, MULTICAST } [CCode (cheader_filename = "linux/if_addr.h")] public int IFA_PAYLOAD (Linux.Netlink.NlMsgHdr nlh); [CCode (cheader_filename = "linux/if_addr.h")] public Linux.Netlink.RtAttr* IFA_RTA (Linux.Network.IfAddrMsg* msg); [CCode (cprefix = "ARPHRD_", has_type_id = false, cheader_filename = "linux/if_arp.h")] public enum IfArpHeaderType { NETROM, ETHER, EETHER, AX25, PRONET, CHAOS, IEEE802, ARCNET, APPLETLK, DLCI, ATM, METRICOM, IEEE1394, EUI64, INFINIBAND, SLIP, CSLIP, SLIP6, CSLIP6, RSRVD, ADAPT, ROSE, X25, HWX25, CAN, PPP, CISCO, HDLC, LAPB, DDCMP, RAWHDLC, TUNNEL, TUNNEL6, FRAD, SKIP, LOOPBACK, LOCALTLK, FDDI, BIF, SIT, IPDDP, IPGRE, PIMREG, HIPPI, ASH, ECONET, IRDA, FCPP, FCAL, FCPL, FCFABRIC, IEEE802_TR, IEEE80211, IEEE80211_PRISM, IEEE80211_RADIOTAP, IEEE802154, PHONET, PHONET_PIPE, CAIF, VOID, NONE } [CCode (cprefix = "ARPOP_", has_type_id = false, cheader_filename = "linux/if_arp.h")] public enum IfArpOpcode { REQUEST, REPLY, RREQUEST, RREPLY, InREQUEST, InREPLY, ARPOP_NAK } // route consts, structs, and methods [CCode (cname = "struct rtentry", has_type_id = false, cheader_filename = "net/route.h", destroy_function = "")] public struct RtEntry { public Posix.SockAddr rt_dst; public Posix.SockAddr rt_gateway; public Posix.SockAddr rt_genmask; public RtFlag rt_flags; public short rt_metric; public string rt_dev; public ulong rt_mtu; public ulong rt_window; public ushort rt_irtt; } [CCode (cname = "ushort", cprefix = "RTF_", has_type_id = false, cheader_filename = "net/route.h")] public enum RtFlag { UP, GATEWAY, HOST, REINSTATE, DYNAMIC, MODIFIED, MTU, WINDOW, IRTT, REJECT, STATIC, XRESOLVE, NOFORWARD, THROW, NOPMTUDISC } /* ioctls */ [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCADDRT; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCDELRT; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCRTMSG; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFNAME; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFLINK; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFCONF; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFFLAGS; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFFLAGS; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFADDR; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFADDR; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFDSTADDR; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFDSTADDR; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFBRDADDR; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFBRDADDR; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFNETMASK; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFNETMASK; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFMETRIC; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFMETRIC; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFMEM; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFMEM; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFMTU; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFMTU; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFNAME; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFHWADDR; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFENCAP; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFENCAP; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFHWADDR; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFSLAVE; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFSLAVE; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCADDMULTI; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCDELMULTI; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFINDEX; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFPFLAGS; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFPFLAGS; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCDIFADDR; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFHWBROADCAST; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFCOUNT; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFBR; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFBR; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFTXQLEN; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFTXQLEN; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCDARP; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGARP; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSARP; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCDRARP; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGRARP; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSRARP; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCGIFMAP; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCSIFMAP; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCADDDLCI; [CCode (cheader_filename = "sys/ioctl.h")] public const int SIOCDELDLCI; } /* * Input subsystem */ [CCode (cprefix = "", lower_case_cprefix = "")] namespace Input { /* * subsystem structures */ [CCode (cname = "struct input_event", has_type_id = false, cheader_filename = "linux/input.h")] public struct Event { public Posix.timeval time; public uint16 type; public uint16 code; public int32 value; } [CCode (cname = "struct input_id", has_type_id = false, cheader_filename = "linux/input.h")] public struct Id { public uint16 bustype; public uint16 vendor; public uint16 product; public uint16 version; } [CCode (cname = "struct input_absinfo", has_type_id = false, cheader_filename = "linux/input.h")] public struct AbsInfo { public int32 value; public int32 minimum; public int32 maximum; public int32 fuzz; public int32 flat; } /* * ioctls */ [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public const int EVIOCGVERSION; [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public const int EVIOCGID; [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public const int EVIOCGREP; [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public const int EVIOCSREP; [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public const int EVIOCGKEYCODE; [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public const int EVIOCSKEYCODE; [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public int EVIOCGNAME( uint len ); [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public int EVIOCGPHYS( uint len ); [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public int EVIOCGUNIQ( uint len ); [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public int EVIOCGKEY( uint len ); [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public int EVIOCGLED( uint len ); [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public int EVIOCGSND( uint len ); [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public int EVIOCGSW( uint len ); [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public int EVIOCGBIT( uint ev, uint len ); [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public int EVIOCGABS( uint abs ); [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public int EVIOCSABS( uint abs ); [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public const int EVIOCSFF; [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public const int EVIOCRMFF; [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public const int EVIOCGEFFECTS; [CCode (cheader_filename = "linux/input.h,sys/ioctl.h")] public const int EVIOCGRAB; /* * event types */ [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_SYN; [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_KEY; [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_REL; [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_ABS; [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_MSC; [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_SW; [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_LED; [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_SND; [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_REP; [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_FF; [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_PWR; [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_FF_STATUS; [CCode (cheader_filename = "linux/input.h")] public const uint16 EV_MAX; /* * synchronization events */ [CCode (cheader_filename = "linux/input.h")] public const int SYN_REPORT; [CCode (cheader_filename = "linux/input.h")] public const int SYN_CONFIG; [CCode (cheader_filename = "linux/input.h")] public const int SYN_MT_REPORT; [CCode (cheader_filename = "linux/input.h")] public const int SYN_DROPPED; [CCode (cheader_filename = "linux/input.h")] public const int SYN_MAX; /* * keys, switches, buttons, etc. */ [CCode (cheader_filename = "linux/input.h")] public const int KEY_RESERVED; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ESC; [CCode (cheader_filename = "linux/input.h")] public const int KEY_1; [CCode (cheader_filename = "linux/input.h")] public const int KEY_2; [CCode (cheader_filename = "linux/input.h")] public const int KEY_3; [CCode (cheader_filename = "linux/input.h")] public const int KEY_4; [CCode (cheader_filename = "linux/input.h")] public const int KEY_5; [CCode (cheader_filename = "linux/input.h")] public const int KEY_6; [CCode (cheader_filename = "linux/input.h")] public const int KEY_7; [CCode (cheader_filename = "linux/input.h")] public const int KEY_8; [CCode (cheader_filename = "linux/input.h")] public const int KEY_9; [CCode (cheader_filename = "linux/input.h")] public const int KEY_0; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MINUS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_EQUAL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BACKSPACE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TAB; [CCode (cheader_filename = "linux/input.h")] public const int KEY_Q; [CCode (cheader_filename = "linux/input.h")] public const int KEY_W; [CCode (cheader_filename = "linux/input.h")] public const int KEY_E; [CCode (cheader_filename = "linux/input.h")] public const int KEY_R; [CCode (cheader_filename = "linux/input.h")] public const int KEY_T; [CCode (cheader_filename = "linux/input.h")] public const int KEY_Y; [CCode (cheader_filename = "linux/input.h")] public const int KEY_U; [CCode (cheader_filename = "linux/input.h")] public const int KEY_I; [CCode (cheader_filename = "linux/input.h")] public const int KEY_O; [CCode (cheader_filename = "linux/input.h")] public const int KEY_P; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LEFTBRACE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RIGHTBRACE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ENTER; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LEFTCTRL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_A; [CCode (cheader_filename = "linux/input.h")] public const int KEY_S; [CCode (cheader_filename = "linux/input.h")] public const int KEY_D; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F; [CCode (cheader_filename = "linux/input.h")] public const int KEY_G; [CCode (cheader_filename = "linux/input.h")] public const int KEY_H; [CCode (cheader_filename = "linux/input.h")] public const int KEY_J; [CCode (cheader_filename = "linux/input.h")] public const int KEY_K; [CCode (cheader_filename = "linux/input.h")] public const int KEY_L; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SEMICOLON; [CCode (cheader_filename = "linux/input.h")] public const int KEY_APOSTROPHE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_GRAVE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LEFTSHIFT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BACKSLASH; [CCode (cheader_filename = "linux/input.h")] public const int KEY_Z; [CCode (cheader_filename = "linux/input.h")] public const int KEY_X; [CCode (cheader_filename = "linux/input.h")] public const int KEY_C; [CCode (cheader_filename = "linux/input.h")] public const int KEY_V; [CCode (cheader_filename = "linux/input.h")] public const int KEY_B; [CCode (cheader_filename = "linux/input.h")] public const int KEY_N; [CCode (cheader_filename = "linux/input.h")] public const int KEY_M; [CCode (cheader_filename = "linux/input.h")] public const int KEY_COMMA; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DOT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SLASH; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RIGHTSHIFT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KPASTERISK; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LEFTALT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SPACE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CAPSLOCK; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F1; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F2; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F3; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F4; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F5; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F6; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F7; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F8; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F9; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F10; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMLOCK; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SCROLLLOCK; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KP7; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KP8; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KP9; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KPMINUS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KP4; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KP5; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KP6; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KPPLUS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KP1; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KP2; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KP3; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KP0; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KPDOT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ZENKAKUHANKAKU; [CCode (cheader_filename = "linux/input.h")] public const int KEY_102ND; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F11; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F12; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KATAKANA; [CCode (cheader_filename = "linux/input.h")] public const int KEY_HIRAGANA; [CCode (cheader_filename = "linux/input.h")] public const int KEY_HENKAN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KATAKANAHIRAGANA; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MUHENKAN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KPJPCOMMA; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KPENTER; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RIGHTCTRL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KPSLASH; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SYSRQ; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RIGHTALT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LINEFEED; [CCode (cheader_filename = "linux/input.h")] public const int KEY_HOME; [CCode (cheader_filename = "linux/input.h")] public const int KEY_UP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PAGEUP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LEFT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RIGHT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_END; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DOWN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PAGEDOWN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_INSERT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DELETE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MACRO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MUTE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_VOLUMEDOWN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_VOLUMEUP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_POWER; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KPEQUAL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KPPLUSMINUS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PAUSE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SCALE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KPCOMMA; [CCode (cheader_filename = "linux/input.h")] public const int KEY_HANGEUL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_HANGUEL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_HANJA; [CCode (cheader_filename = "linux/input.h")] public const int KEY_YEN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LEFTMETA; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RIGHTMETA; [CCode (cheader_filename = "linux/input.h")] public const int KEY_COMPOSE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_STOP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_AGAIN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PROPS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_UNDO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FRONT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_COPY; [CCode (cheader_filename = "linux/input.h")] public const int KEY_OPEN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PASTE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FIND; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CUT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_HELP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MENU; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CALC; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SETUP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SLEEP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_WAKEUP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FILE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SENDFILE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DELETEFILE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_XFER; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PROG1; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PROG2; [CCode (cheader_filename = "linux/input.h")] public const int KEY_WWW; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MSDOS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_COFFEE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SCREENLOCK; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DIRECTION; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CYCLEWINDOWS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MAIL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BOOKMARKS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_COMPUTER; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BACK; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FORWARD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CLOSECD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_EJECTCD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_EJECTCLOSECD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NEXTSONG; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PLAYPAUSE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PREVIOUSSONG; [CCode (cheader_filename = "linux/input.h")] public const int KEY_STOPCD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RECORD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_REWIND; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PHONE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ISO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CONFIG; [CCode (cheader_filename = "linux/input.h")] public const int KEY_HOMEPAGE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_REFRESH; [CCode (cheader_filename = "linux/input.h")] public const int KEY_EXIT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MOVE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_EDIT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SCROLLUP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SCROLLDOWN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KPLEFTPAREN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KPRIGHTPAREN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NEW; [CCode (cheader_filename = "linux/input.h")] public const int KEY_REDO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F13; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F14; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F15; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F16; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F17; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F18; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F19; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F20; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F21; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F22; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F23; [CCode (cheader_filename = "linux/input.h")] public const int KEY_F24; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PLAYCD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PAUSECD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PROG3; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PROG4; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DASHBOARD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SUSPEND; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CLOSE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PLAY; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FASTFORWARD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BASSBOOST; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PRINT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_HP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CAMERA; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SOUND; [CCode (cheader_filename = "linux/input.h")] public const int KEY_QUESTION; [CCode (cheader_filename = "linux/input.h")] public const int KEY_EMAIL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CHAT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SEARCH; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CONNECT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FINANCE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SPORT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SHOP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ALTERASE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CANCEL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRIGHTNESSDOWN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRIGHTNESSUP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MEDIA; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SWITCHVIDEOMODE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KBDILLUMTOGGLE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KBDILLUMDOWN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KBDILLUMUP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SEND; [CCode (cheader_filename = "linux/input.h")] public const int KEY_REPLY; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FORWARDMAIL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SAVE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DOCUMENTS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BATTERY; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BLUETOOTH; [CCode (cheader_filename = "linux/input.h")] public const int KEY_WLAN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_UWB; [CCode (cheader_filename = "linux/input.h")] public const int KEY_UNKNOWN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_VIDEO_NEXT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_VIDEO_PREV; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRIGHTNESS_CYCLE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRIGHTNESS_AUTO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRIGHTNESS_ZERO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DISPLAY_OFF; [CCode (cheader_filename = "linux/input.h")] public const int KEY_WWAN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_WIMAX; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RFKILL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MICMUTE; /* Code 255 is reserved for special needs of AT keyboard driver */ [CCode (cheader_filename = "linux/input.h")] public const int BTN_MISC; [CCode (cheader_filename = "linux/input.h")] public const int BTN_0; [CCode (cheader_filename = "linux/input.h")] public const int BTN_1; [CCode (cheader_filename = "linux/input.h")] public const int BTN_2; [CCode (cheader_filename = "linux/input.h")] public const int BTN_3; [CCode (cheader_filename = "linux/input.h")] public const int BTN_4; [CCode (cheader_filename = "linux/input.h")] public const int BTN_5; [CCode (cheader_filename = "linux/input.h")] public const int BTN_6; [CCode (cheader_filename = "linux/input.h")] public const int BTN_7; [CCode (cheader_filename = "linux/input.h")] public const int BTN_8; [CCode (cheader_filename = "linux/input.h")] public const int BTN_9; [CCode (cheader_filename = "linux/input.h")] public const int BTN_MOUSE; [CCode (cheader_filename = "linux/input.h")] public const int BTN_LEFT; [CCode (cheader_filename = "linux/input.h")] public const int BTN_RIGHT; [CCode (cheader_filename = "linux/input.h")] public const int BTN_MIDDLE; [CCode (cheader_filename = "linux/input.h")] public const int BTN_SIDE; [CCode (cheader_filename = "linux/input.h")] public const int BTN_EXTRA; [CCode (cheader_filename = "linux/input.h")] public const int BTN_FORWARD; [CCode (cheader_filename = "linux/input.h")] public const int BTN_BACK; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TASK; [CCode (cheader_filename = "linux/input.h")] public const int BTN_JOYSTICK; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER; [CCode (cheader_filename = "linux/input.h")] public const int BTN_THUMB; [CCode (cheader_filename = "linux/input.h")] public const int BTN_THUMB2; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOP; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOP2; [CCode (cheader_filename = "linux/input.h")] public const int BTN_PINKIE; [CCode (cheader_filename = "linux/input.h")] public const int BTN_BASE; [CCode (cheader_filename = "linux/input.h")] public const int BTN_BASE2; [CCode (cheader_filename = "linux/input.h")] public const int BTN_BASE3; [CCode (cheader_filename = "linux/input.h")] public const int BTN_BASE4; [CCode (cheader_filename = "linux/input.h")] public const int BTN_BASE5; [CCode (cheader_filename = "linux/input.h")] public const int BTN_BASE6; [CCode (cheader_filename = "linux/input.h")] public const int BTN_DEAD; [CCode (cheader_filename = "linux/input.h")] public const int BTN_GAMEPAD; [CCode (cheader_filename = "linux/input.h")] public const int BTN_A; [CCode (cheader_filename = "linux/input.h")] public const int BTN_B; [CCode (cheader_filename = "linux/input.h")] public const int BTN_C; [CCode (cheader_filename = "linux/input.h")] public const int BTN_X; [CCode (cheader_filename = "linux/input.h")] public const int BTN_Y; [CCode (cheader_filename = "linux/input.h")] public const int BTN_Z; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TL; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TR; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TL2; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TR2; [CCode (cheader_filename = "linux/input.h")] public const int BTN_SELECT; [CCode (cheader_filename = "linux/input.h")] public const int BTN_START; [CCode (cheader_filename = "linux/input.h")] public const int BTN_MODE; [CCode (cheader_filename = "linux/input.h")] public const int BTN_THUMBL; [CCode (cheader_filename = "linux/input.h")] public const int BTN_THUMBR; [CCode (cheader_filename = "linux/input.h")] public const int BTN_DIGI; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOOL_PEN; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOOL_RUBBER; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOOL_BRUSH; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOOL_PENCIL; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOOL_AIRBRUSH; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOOL_FINGER; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOOL_MOUSE; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOOL_LENS; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOOL_QUINTTAP; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOUCH; [CCode (cheader_filename = "linux/input.h")] public const int BTN_STYLUS; [CCode (cheader_filename = "linux/input.h")] public const int BTN_STYLUS2; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOOL_DOUBLETAP; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOOL_TRIPLETAP; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TOOL_QUADTAP; [CCode (cheader_filename = "linux/input.h")] public const int BTN_WHEEL; [CCode (cheader_filename = "linux/input.h")] public const int BTN_GEAR_DOWN; [CCode (cheader_filename = "linux/input.h")] public const int BTN_GEAR_UP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_OK; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SELECT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_GOTO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CLEAR; [CCode (cheader_filename = "linux/input.h")] public const int KEY_POWER2; [CCode (cheader_filename = "linux/input.h")] public const int KEY_OPTION; [CCode (cheader_filename = "linux/input.h")] public const int KEY_INFO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TIME; [CCode (cheader_filename = "linux/input.h")] public const int KEY_VENDOR; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ARCHIVE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PROGRAM; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CHANNEL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FAVORITES; [CCode (cheader_filename = "linux/input.h")] public const int KEY_EPG; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PVR; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MHP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LANGUAGE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TITLE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SUBTITLE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ANGLE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ZOOM; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MODE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KEYBOARD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SCREEN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PC; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TV; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TV2; [CCode (cheader_filename = "linux/input.h")] public const int KEY_VCR; [CCode (cheader_filename = "linux/input.h")] public const int KEY_VCR2; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SAT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SAT2; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TAPE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RADIO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TUNER; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PLAYER; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TEXT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DVD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_AUX; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MP3; [CCode (cheader_filename = "linux/input.h")] public const int KEY_AUDIO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_VIDEO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DIRECTORY; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LIST; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MEMO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CALENDAR; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RED; [CCode (cheader_filename = "linux/input.h")] public const int KEY_GREEN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_YELLOW; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BLUE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CHANNELUP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CHANNELDOWN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FIRST; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LAST; [CCode (cheader_filename = "linux/input.h")] public const int KEY_AB; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NEXT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RESTART; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SLOW; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SHUFFLE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BREAK; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PREVIOUS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DIGITS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TEEN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TWEN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_VIDEOPHONE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_GAMES; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ZOOMIN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ZOOMOUT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ZOOMRESET; [CCode (cheader_filename = "linux/input.h")] public const int KEY_WORDPROCESSOR; [CCode (cheader_filename = "linux/input.h")] public const int KEY_EDITOR; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SPREADSHEET; [CCode (cheader_filename = "linux/input.h")] public const int KEY_GRAPHICSEDITOR; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PRESENTATION; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DATABASE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NEWS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_VOICEMAIL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ADDRESSBOOK; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MESSENGER; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DISPLAYTOGGLE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRIGHTNESS_TOGGLE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SPELLCHECK; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LOGOFF; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DOLLAR; [CCode (cheader_filename = "linux/input.h")] public const int KEY_EURO; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FRAMEBACK; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FRAMEFORWARD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CONTEXT_MENU; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MEDIA_REPEAT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_10CHANNELSUP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_10CHANNELSDOWN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_IMAGES; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DEL_EOL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DEL_EOS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_INS_LINE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DEL_LINE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_ESC; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F1; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F2; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F3; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F4; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F5; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F6; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F7; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F8; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F9; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F10; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F11; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F12; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_1; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_2; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_D; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_E; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_F; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_S; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FN_B; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRL_DOT1; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRL_DOT2; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRL_DOT3; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRL_DOT4; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRL_DOT5; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRL_DOT6; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRL_DOT7; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRL_DOT8; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRL_DOT9; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRL_DOT10; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_0; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_1; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_2; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_3; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_4; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_5; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_6; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_7; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_8; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_9; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_STAR; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_POUND; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_A; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_B; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_C; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_D; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CAMERA_FOCUS; [CCode (cheader_filename = "linux/input.h")] public const int KEY_WPS_BUTTON; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TOUCHPAD_TOGGLE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TOUCHPAD_ON; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TOUCHPAD_OFF; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CAMERA_ZOOMIN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CAMERA_ZOOMOUT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CAMERA_UP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CAMERA_DOWN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CAMERA_LEFT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CAMERA_RIGHT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ATTENDANT_ON; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ATTENDANT_OFF; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ATTENDANT_TOGGLE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LIGHTS_TOGGLE; [CCode (cheader_filename = "linux/input.h")] public const int BTN_DPAD_UP; [CCode (cheader_filename = "linux/input.h")] public const int BTN_DPAD_DOWN; [CCode (cheader_filename = "linux/input.h")] public const int BTN_DPAD_LEFT; [CCode (cheader_filename = "linux/input.h")] public const int BTN_DPAD_RIGHT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ALS_TOGGLE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BUTTONCONFIG; [CCode (cheader_filename = "linux/input.h")] public const int KEY_TASKMANAGER; [CCode (cheader_filename = "linux/input.h")] public const int KEY_JOURNAL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_CONTROLPANEL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_APPSELECT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SCREENSAVER; [CCode (cheader_filename = "linux/input.h")] public const int KEY_VOICECOMMAND; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRIGHTNESS_MIN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_BRIGHTNESS_MAX; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KBDINPUTASSIST_PREV; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KBDINPUTASSIST_NEXT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KBDINPUTASSIST_PREVGROUP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KBDINPUTASSIST_NEXTGROUP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KBDINPUTASSIST_ACCEPT; [CCode (cheader_filename = "linux/input.h")] public const int KEY_KBDINPUTASSIST_CANCEL; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RIGHT_UP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_RIGHT_DOWN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LEFT_UP; [CCode (cheader_filename = "linux/input.h")] public const int KEY_LEFT_DOWN; [CCode (cheader_filename = "linux/input.h")] public const int KEY_ROOT_MENU; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MEDIA_TOP_MENU; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_11; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NUMERIC_12; [CCode (cheader_filename = "linux/input.h")] public const int KEY_AUDIO_DESC; [CCode (cheader_filename = "linux/input.h")] public const int KEY_3D_MODE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_NEXT_FAVORITE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_STOP_RECORD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_PAUSE_RECORD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_VOD; [CCode (cheader_filename = "linux/input.h")] public const int KEY_UNMUTE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_FASTREVERSE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_SLOWREVERSE; [CCode (cheader_filename = "linux/input.h")] public const int KEY_DATA; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY1; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY2; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY3; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY4; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY5; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY6; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY7; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY8; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY9; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY10; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY11; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY12; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY13; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY14; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY15; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY16; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY17; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY18; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY19; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY20; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY21; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY22; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY23; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY24; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY25; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY26; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY27; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY28; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY29; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY30; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY31; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY32; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY33; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY34; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY35; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY36; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY37; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY38; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY39; [CCode (cheader_filename = "linux/input.h")] public const int BTN_TRIGGER_HAPPY40; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MIN_INTERESTING; [CCode (cheader_filename = "linux/input.h")] public const int KEY_MAX; /* * Relative axes */ [CCode (cheader_filename = "linux/input.h")] public const int REL_X; [CCode (cheader_filename = "linux/input.h")] public const int REL_Y; [CCode (cheader_filename = "linux/input.h")] public const int REL_Z; [CCode (cheader_filename = "linux/input.h")] public const int REL_RX; [CCode (cheader_filename = "linux/input.h")] public const int REL_RY; [CCode (cheader_filename = "linux/input.h")] public const int REL_RZ; [CCode (cheader_filename = "linux/input.h")] public const int REL_HWHEEL; [CCode (cheader_filename = "linux/input.h")] public const int REL_DIAL; [CCode (cheader_filename = "linux/input.h")] public const int REL_WHEEL; [CCode (cheader_filename = "linux/input.h")] public const int REL_MISC; [CCode (cheader_filename = "linux/input.h")] public const int REL_MAX; /* * Absolute axes */ [CCode (cheader_filename = "linux/input.h")] public const int ABS_X; [CCode (cheader_filename = "linux/input.h")] public const int ABS_Y; [CCode (cheader_filename = "linux/input.h")] public const int ABS_Z; [CCode (cheader_filename = "linux/input.h")] public const int ABS_RX; [CCode (cheader_filename = "linux/input.h")] public const int ABS_RY; [CCode (cheader_filename = "linux/input.h")] public const int ABS_RZ; [CCode (cheader_filename = "linux/input.h")] public const int ABS_THROTTLE; [CCode (cheader_filename = "linux/input.h")] public const int ABS_RUDDER; [CCode (cheader_filename = "linux/input.h")] public const int ABS_WHEEL; [CCode (cheader_filename = "linux/input.h")] public const int ABS_GAS; [CCode (cheader_filename = "linux/input.h")] public const int ABS_BRAKE; [CCode (cheader_filename = "linux/input.h")] public const int ABS_HAT0X; [CCode (cheader_filename = "linux/input.h")] public const int ABS_HAT0Y; [CCode (cheader_filename = "linux/input.h")] public const int ABS_HAT1X; [CCode (cheader_filename = "linux/input.h")] public const int ABS_HAT1Y; [CCode (cheader_filename = "linux/input.h")] public const int ABS_HAT2X; [CCode (cheader_filename = "linux/input.h")] public const int ABS_HAT2Y; [CCode (cheader_filename = "linux/input.h")] public const int ABS_HAT3X; [CCode (cheader_filename = "linux/input.h")] public const int ABS_HAT3Y; [CCode (cheader_filename = "linux/input.h")] public const int ABS_PRESSURE; [CCode (cheader_filename = "linux/input.h")] public const int ABS_DISTANCE; [CCode (cheader_filename = "linux/input.h")] public const int ABS_TILT_X; [CCode (cheader_filename = "linux/input.h")] public const int ABS_TILT_Y; [CCode (cheader_filename = "linux/input.h")] public const int ABS_TOOL_WIDTH; [CCode (cheader_filename = "linux/input.h")] public const int ABS_VOLUME; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MISC; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_SLOT; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_TOUCH_MAJOR; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_TOUCH_MINOR; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_WIDTH_MAJOR; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_WIDTH_MINOR; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_ORIENTATION; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_POSITION_X; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_POSITION_Y; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_TOOL_TYPE; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_BLOB_ID; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_TRACKING_ID; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_PRESSURE; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_DISTANCE; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_TOOL_X; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MT_TOOL_Y; [CCode (cheader_filename = "linux/input.h")] public const int ABS_MAX; /* * Switch events */ [CCode (cheader_filename = "linux/input.h")] public const int SW_LID; [CCode (cheader_filename = "linux/input.h")] public const int SW_TABLET_MODE; [CCode (cheader_filename = "linux/input.h")] public const int SW_HEADPHONE_INSERT; [CCode (cheader_filename = "linux/input.h")] public const int SW_RFKILL_ALL; [CCode (cheader_filename = "linux/input.h")] public const int SW_RADIO; [CCode (cheader_filename = "linux/input.h")] public const int SW_MICROPHONE_INSERT; [CCode (cheader_filename = "linux/input.h")] public const int SW_DOCK; [CCode (cheader_filename = "linux/input.h")] public const int SW_LINEOUT_INSERT; [CCode (cheader_filename = "linux/input.h")] public const int SW_JACK_PHYSICAL_INSERT; [CCode (cheader_filename = "linux/input.h")] public const int SW_VIDEOOUT_INSERT; [CCode (cheader_filename = "linux/input.h")] public const int SW_CAMERA_LENS_COVER; [CCode (cheader_filename = "linux/input.h")] public const int SW_KEYPAD_SLIDE; [CCode (cheader_filename = "linux/input.h")] public const int SW_FRONT_PROXIMITY; [CCode (cheader_filename = "linux/input.h")] public const int SW_ROTATE_LOCK; [CCode (cheader_filename = "linux/input.h")] public const int SW_LINEIN_INSERT; [CCode (cheader_filename = "linux/input.h")] public const int SW_MUTE_DEVICE; [CCode (cheader_filename = "linux/input.h")] public const int SW_PEN_INSERTED; [CCode (cheader_filename = "linux/input.h")] public const int SW_MAX; /* * Misc events */ [CCode (cheader_filename = "linux/input.h")] public const int MSC_SERIAL; [CCode (cheader_filename = "linux/input.h")] public const int MSC_PULSELED; [CCode (cheader_filename = "linux/input.h")] public const int MSC_GESTURE; [CCode (cheader_filename = "linux/input.h")] public const int MSC_RAW; [CCode (cheader_filename = "linux/input.h")] public const int MSC_SCAN; [CCode (cheader_filename = "linux/input.h")] public const int MSC_TIMESTAMP; [CCode (cheader_filename = "linux/input.h")] public const int MSC_MAX; /* * LEDs */ [CCode (cheader_filename = "linux/input.h")] public const int LED_NUML; [CCode (cheader_filename = "linux/input.h")] public const int LED_CAPSL; [CCode (cheader_filename = "linux/input.h")] public const int LED_SCROLLL; [CCode (cheader_filename = "linux/input.h")] public const int LED_COMPOSE; [CCode (cheader_filename = "linux/input.h")] public const int LED_KANA; [CCode (cheader_filename = "linux/input.h")] public const int LED_SLEEP; [CCode (cheader_filename = "linux/input.h")] public const int LED_SUSPEND; [CCode (cheader_filename = "linux/input.h")] public const int LED_MUTE; [CCode (cheader_filename = "linux/input.h")] public const int LED_MISC; [CCode (cheader_filename = "linux/input.h")] public const int LED_MAIL; [CCode (cheader_filename = "linux/input.h")] public const int LED_CHARGING; [CCode (cheader_filename = "linux/input.h")] public const int LED_MAX; /* * Autorepeat values */ [CCode (cheader_filename = "linux/input.h")] public const int REP_DELAY; [CCode (cheader_filename = "linux/input.h")] public const int REP_PERIOD; [CCode (cheader_filename = "linux/input.h")] public const int REP_MAX; /* * Sounds */ [CCode (cheader_filename = "linux/input.h")] public const int SND_CLICK; [CCode (cheader_filename = "linux/input.h")] public const int SND_BELL; [CCode (cheader_filename = "linux/input.h")] public const int SND_TONE; [CCode (cheader_filename = "linux/input.h")] public const int SND_MAX; /* * IDs. */ [CCode (cheader_filename = "linux/input.h")] public const int ID_BUS; [CCode (cheader_filename = "linux/input.h")] public const int ID_VENDOR; [CCode (cheader_filename = "linux/input.h")] public const int ID_PRODUCT; [CCode (cheader_filename = "linux/input.h")] public const int ID_VERSION; [CCode (cheader_filename = "linux/input.h")] public const int BUS_PCI; [CCode (cheader_filename = "linux/input.h")] public const int BUS_ISAPNP; [CCode (cheader_filename = "linux/input.h")] public const int BUS_USB; [CCode (cheader_filename = "linux/input.h")] public const int BUS_HIL; [CCode (cheader_filename = "linux/input.h")] public const int BUS_BLUETOOTH; [CCode (cheader_filename = "linux/input.h")] public const int BUS_VIRTUAL; [CCode (cheader_filename = "linux/input.h")] public const int BUS_ISA; [CCode (cheader_filename = "linux/input.h")] public const int BUS_I8042; [CCode (cheader_filename = "linux/input.h")] public const int BUS_XTKBD; [CCode (cheader_filename = "linux/input.h")] public const int BUS_RS232; [CCode (cheader_filename = "linux/input.h")] public const int BUS_GAMEPORT; [CCode (cheader_filename = "linux/input.h")] public const int BUS_PARPORT; [CCode (cheader_filename = "linux/input.h")] public const int BUS_AMIGA; [CCode (cheader_filename = "linux/input.h")] public const int BUS_ADB; [CCode (cheader_filename = "linux/input.h")] public const int BUS_I2C; [CCode (cheader_filename = "linux/input.h")] public const int BUS_HOST; [CCode (cheader_filename = "linux/input.h")] public const int BUS_GSC; [CCode (cheader_filename = "linux/input.h")] public const int BUS_ATARI; /* MT_TOOL types */ [CCode (cheader_filename = "linux/input.h")] public const int MT_TOOL_FINGER; [CCode (cheader_filename = "linux/input.h")] public const int MT_TOOL_PEN; [CCode (cheader_filename = "linux/input.h")] public const int MT_TOOL_PALM; [CCode (cheader_filename = "linux/input.h")] public const int MT_TOOL_MAX; /* Values describing the status of a force-feedback effect */ [CCode (cheader_filename = "linux/input.h")] public const int FF_STATUS_STOPPED; [CCode (cheader_filename = "linux/input.h")] public const int FF_STATUS_PLAYING; [CCode (cheader_filename = "linux/input.h")] public const int FF_STATUS_MAX; } /* * Netlink subsystem */ [CCode (cprefix = "", lower_case_cprefix = "", cheader_filename = "linux/netlink.h")] namespace Netlink { [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_ROUTE; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_UNUSED; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_USERSOCK; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_FIREWALL; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_INET_DIAG; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_NFLOG; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_XFRM; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_SELINUX; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_ISCSI; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_AUDIT; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_FIB_LOOKUP; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_CONNECTOR; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_NETFILTER; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_IP6_FW; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_DNRTMSG; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_KOBJECT_UEVENT; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_GENERIC; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_SCSITRANSPORT; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_ECRYPTFS; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_ADD_MEMBERSHIP; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_DROP_MEMBERSHIP; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_PKTINFO; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_BROADCAST_ERROR; [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_NO_ENOBUFS; [CCode (cheader_filename = "linux/netlink.h")] public const int NLM_F_REQUEST; [CCode (cheader_filename = "linux/netlink.h")] public const int NLM_F_MULTI; [CCode (cheader_filename = "linux/netlink.h")] public const int NLM_F_ACK; [CCode (cheader_filename = "linux/netlink.h")] public const int NLM_F_ECHO; [CCode (cheader_filename = "linux/netlink.h")] public const int NLM_F_ROOT; [CCode (cheader_filename = "linux/netlink.h")] public const int NLM_F_MATCH; [CCode (cheader_filename = "linux/netlink.h")] public const int NLM_F_ATOMIC; [CCode (cheader_filename = "linux/netlink.h")] public const int NLM_F_DUMP; [CCode (cheader_filename = "linux/netlink.h")] public const int NLM_F_REPLACE; [CCode (cheader_filename = "linux/netlink.h")] public const int NLM_F_EXCL; [CCode (cheader_filename = "linux/netlink.h")] public const int NLM_F_CREATE; [CCode (cheader_filename = "linux/netlink.h")] public const int NLM_F_APPEND; [CCode (cheader_filename = "linux/netlink.h")] public const int NLMSG_ALIGNTO; [CCode (cheader_filename = "linux/netlink.h")] public const int NLMSG_NOOP; [CCode (cheader_filename = "linux/netlink.h")] public const int NLMSG_ERROR; [CCode (cheader_filename = "linux/netlink.h")] public const int NLMSG_DONE; [CCode (cheader_filename = "linux/netlink.h")] public const int NLMSG_OVERRUN; [CCode (cheader_filename = "linux/netlink.h")] public const int NLMSG_MIN_TYPE; /* netlink action macros, we bind them as functions for convenience */ [CCode (cheader_filename = "linux/netlink.h")] public void NLMSG_ALIGN (int len); [CCode (cheader_filename = "linux/netlink.h")] public int NLMSG_HDRLEN (); [CCode (cheader_filename = "linux/netlink.h")] public int NLMSG_LENGTH (int len); [CCode (cheader_filename = "linux/netlink.h")] public void NLMSG_SPACE (int len); [CCode (cheader_filename = "linux/netlink.h")] public void* NLMSG_DATA (NlMsgHdr nlh); [CCode (cheader_filename = "linux/netlink.h")] public unowned NlMsgHdr NLMSG_NEXT (NlMsgHdr nlh, int len); [CCode (cheader_filename = "linux/netlink.h")] public bool NLMSG_OK (NlMsgHdr nlh, int len); [CCode (cheader_filename = "linux/netlink.h")] public int NLMSG_PAYLOAD (NlMsgHdr nlh, int len); // netlink socket, can be used instead of sockaddr [CCode (cname = "struct sockaddr_nl", has_type_id = false, cheader_filename = "linux/netlink.h", destroy_function = "")] public struct SockAddrNl { public int nl_family; public ushort nl_pad; public uint32 nl_pid; public uint32 nl_groups; } // netlink message header [CCode (cname = "struct nlmsghdr", has_type_id = false, cheader_filename = "linux/netlink.h", destroy_function = "")] public struct NlMsgHdr { public uint32 nlmsg_len; public uint16 nlmsg_type; public uint16 nlmsg_flags; public uint32 nlmsg_seq; public uint32 nlmsg_pid; } // netlink error message [CCode (cname = "struct nlmsgerr", has_type_id = false, cheader_filename = "linux/netlink.h", destroy_function = "")] public struct NlMsgErr { public int error; public NlMsgHdr msg; } // rtnetlink multicast groups ( userland compatibility values ) [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_LINK; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_NOTIFY; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_NEIGH; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_TC; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_IPV4_IFADDR; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_IPV4_MROUTE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_IPV4_ROUTE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_IPV4_RULE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_IPV6_IFADDR; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_IPV6_MROUTE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_IPV6_ROUTE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_IPV6_IFINFO; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_DECnet_IFADDR; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_DECnet_ROUTE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTMGRP_IPV6_PREFIX; // rtnetlink multicast groups ( 1 << group ) [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_NONE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_LINK; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_NOTIFY; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_NEIGH; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_TC; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_IPV4_IFADDR; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_IPV4_MROUTE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_IPV4_ROUTE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_IPV4_RULE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_IPV6_IFADDR; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_IPV6_MROUTE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_IPV6_ROUTE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_IPV6_IFINFO; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_DECnet_IFADDR; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_NOP2; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_DECnet_ROUTE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_DECnet_RULE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_NOP4; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_IPV6_PREFIX; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_IPV6_RULE; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_ND_USEROPT; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_PHONET_IFADDR; [CCode (cheader_filename = "linux/rtnetlink.h")] public const int RTNLGRP_PHONET_ROUTE; /* rtnetlink action macros, we bind them as functions for convenience */ [CCode (cheader_filename = "linux/rtnetlink.h")] public void RTA_ALIGN (int len); [CCode (cheader_filename = "linux/rtnetlink.h")] public int RTA_HDRLEN (); [CCode (cheader_filename = "linux/rtnetlink.h")] public int RTA_LENGTH (int len); [CCode (cheader_filename = "linux/rtnetlink.h")] public void RTA_SPACE (int len); [CCode (cheader_filename = "linux/rtnetlink.h")] public void* RTA_DATA (RtAttr* rta); [CCode (cheader_filename = "linux/rtnetlink.h")] public RtAttr* RTA_NEXT (RtAttr* rta, int len); [CCode (cheader_filename = "linux/rtnetlink.h")] public bool RTA_OK (RtAttr* rta, int len); [CCode (cheader_filename = "linux/rtnetlink.h")] public void* RTA_PAYLOAD (RtAttr* rta, int len); /* [CCode (cheader_filename = "sys/socket.h", sentinel = "")] public int bind (int sockfd, SockAddrNl addr, ulong length); */ // rtnetlink info message [CCode (cname = "struct ifinfomsg", has_type_id = false, cheader_filename = "linux/rtnetlink.h", destroy_function = "")] public struct IfInfoMsg { public uchar ifi_family; public uchar __ifi_pad; public ushort ifi_type; public int ifi_index; public uint32 ifi_flags; public uint32 ifi_change; } // rtnetlink attribute [CCode (cname = "struct rtattr", has_type_id = false, cheader_filename = "linux/rtnetlink.h", destroy_function = "")] public struct RtAttr { public ushort rta_len; public ushort rta_type; } // rtnetlink routing / discovery messages [CCode (cprefix = "RTM_", has_type_id = false, cheader_filename = "linux/rtnetlink.h")] public enum RtMessageType { NEWLINK, DELLINK, GETLINK, SETLINK, NEWADDR, DELADDR, GETADDR, NEWROUTE, DELROUTE, GETROUTE, NEWNEIGH, DELNEIGH, GETNEIGH, NEWRULE, DELRULE, GETRULE, NEWQDISC, DELQDISC, GETQDISC, NEWTCLASS, DELTCLASS, GETTCLASS, NEWTFILTER, DELTFILTER, GETTFILTER, NEWACTION, DELACTION, GETACTION, NEWPREFIX, GETMULTICAST, GETANYCAST, NEWNEIGHTBL, GETNEIGHTBL, SETNEIGHTBL, } } /* * Real time clock subsystem */ [CCode (cprefix = "", lower_case_cprefix = "")] namespace Rtc { [CCode (cname = "struct rtc_time", cheader_filename = "linux/rtc.h", has_type_id = false)] public struct Time { public int tm_sec; public int tm_min; public int tm_hour; public int tm_mday; public int tm_mon; public int tm_year; public int tm_wday; public int tm_yday; public int tm_isdst; } [CCode (cname = "struct rtc_wkalrm", has_type_id = false, cheader_filename = "linux/rtc.h")] public struct WakeAlarm { public char enabled; public char pending; public Linux.Rtc.Time time; } [CCode (cheader_filename = "linux/rtc.h,sys/ioctl.h")] public const int RTC_RD_TIME; [CCode (cheader_filename = "linux/rtc.h,sys/ioctl.h")] public const int RTC_SET_TIME; [CCode (cheader_filename = "linux/rtc.h,sys/ioctl.h")] public const int RTC_WKALM_RD; [CCode (cheader_filename = "linux/rtc.h,sys/ioctl.h")] public const int RTC_WKALM_SET; } /* * Socket extensions (non-posix) */ [CCode (cprefix = "", lower_case_cprefix = "")] namespace Socket { [CCode (cheader_filename = "sys/socket.h")] public const int AF_NETLINK; [CCode (cheader_filename = "sys/socket.h")] public const int AF_PHONET; [CCode (cheader_filename = "sys/socket.h")] public const int AF_UNSPEC; [CCode (cheader_filename = "sys/socket.h")] public const int SOCK_NONBLOCK; [CCode (cheader_filename = "sys/socket.h")] public const int SOCK_CLOEXEC; [CCode (cname = "struct ucred", has_type_id = false, cheader_filename = "linux/socket.h", destroy_function = "")] public struct ucred { public uint32 pid; public uint32 uid; public uint32 gid; } /* setsockopt(2) level constants */ [CCode (cheader_filename = "linux/socket.h")] public const int SOL_IP; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_TCP; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_UDP; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_IPV6; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_ICMPV6; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_SCTP; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_UDPLITE; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_RAW; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_IPX; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_AX25; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_ATALK; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_NETROM; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_ROSE; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_DECNET; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_X25; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_PACKET; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_ATM; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_AAL; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_IRDA; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_NETBEUI; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_LLC; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_DCCP; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_NETLINK; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_TIPC; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_RXRPC; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_PPPOL2TP; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_BLUETOOTH; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_PNPIPE; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_RDS; [CCode (cheader_filename = "linux/socket.h")] public const int SOL_IUCV; [CCode (cheader_filename = "sys/socket.h")] public const int SOL_SOCKET; [CCode (cheader_filename = "sys/socket.h")] public const int SO_DEBUG; [CCode (cheader_filename = "sys/socket.h")] public const int SO_REUSEADDR; [CCode (cheader_filename = "sys/socket.h")] public const int SO_TYPE; [CCode (cheader_filename = "sys/socket.h")] public const int SO_ERROR; [CCode (cheader_filename = "sys/socket.h")] public const int SO_DONTROUTE; [CCode (cheader_filename = "sys/socket.h")] public const int SO_BROADCAST; [CCode (cheader_filename = "sys/socket.h")] public const int SO_SNDBUF; [CCode (cheader_filename = "sys/socket.h")] public const int SO_RCVBUF; [CCode (cheader_filename = "sys/socket.h")] public const int SO_SNDBUFFORCE; [CCode (cheader_filename = "sys/socket.h")] public const int SO_RCVBUFFORCE; [CCode (cheader_filename = "sys/socket.h")] public const int SO_KEEPALIVE; [CCode (cheader_filename = "sys/socket.h")] public const int SO_OOBINLINE; [CCode (cheader_filename = "sys/socket.h")] public const int SO_NO_CHECK; [CCode (cheader_filename = "sys/socket.h")] public const int SO_PRIORITY; [CCode (cheader_filename = "sys/socket.h")] public const int SO_LINGER; [CCode (cheader_filename = "sys/socket.h")] public const int SO_BSDCOMPAT; [CCode (cheader_filename = "sys/socket.h")] public const int SO_REUSEPORT; [CCode (cheader_filename = "sys/socket.h")] public const int SO_PASSCRED; [CCode (cheader_filename = "sys/socket.h")] public const int SO_PEERCRED; [CCode (cheader_filename = "sys/socket.h")] public const int SO_RCVLOWAT; [CCode (cheader_filename = "sys/socket.h")] public const int SO_SNDLOWAT; [CCode (cheader_filename = "sys/socket.h")] public const int SO_RCVTIMEO; [CCode (cheader_filename = "sys/socket.h")] public const int SO_SNDTIMEO; [CCode (cheader_filename = "sys/socket.h")] public const int SO_SECURITY_AUTHENTICATION; [CCode (cheader_filename = "sys/socket.h")] public const int SO_SECURITY_ENCRYPTION_TRANSPORT; [CCode (cheader_filename = "sys/socket.h")] public const int SO_SECURITY_ENCRYPTION_NETWORK; [CCode (cheader_filename = "sys/socket.h")] public const int SO_BINDTODEVICE; [CCode (cheader_filename = "sys/socket.h")] public const int SO_ATTACH_FILTER; [CCode (cheader_filename = "sys/socket.h")] public const int SO_DETACH_FILTER; [CCode (cheader_filename = "sys/socket.h")] public const int SO_GET_FILTER; [CCode (cheader_filename = "sys/socket.h")] public const int SO_PEERNAME; [CCode (cheader_filename = "sys/socket.h")] public const int SO_TIMESTAMP; [CCode (cheader_filename = "sys/socket.h")] public const int SCM_TIMESTAMP; [CCode (cheader_filename = "sys/socket.h")] public const int SO_ACCEPTCONN; [CCode (cheader_filename = "sys/socket.h")] public const int SO_PEERSEC; [CCode (cheader_filename = "sys/socket.h")] public const int SO_PASSSEC; [CCode (cheader_filename = "sys/socket.h")] public const int SO_TIMESTAMPNS; [CCode (cheader_filename = "sys/socket.h")] public const int SCM_TIMESTAMPNS; [CCode (cheader_filename = "sys/socket.h")] public const int SO_MARK; [CCode (cheader_filename = "sys/socket.h")] public const int SO_TIMESTAMPING; [CCode (cheader_filename = "sys/socket.h")] public const int SCM_TIMESTAMPING; [CCode (cheader_filename = "sys/socket.h")] public const int SO_PROTOCOL; [CCode (cheader_filename = "sys/socket.h")] public const int SO_DOMAIN; [CCode (cheader_filename = "sys/socket.h")] public const int SO_RXQ_OVFL; [CCode (cheader_filename = "sys/socket.h")] public const int SO_WIFI_STATUS; [CCode (cheader_filename = "sys/socket.h")] public const int SCM_WIFI_STATUS; [CCode (cheader_filename = "sys/socket.h")] public const int SO_PEEK_OFF; [CCode (cheader_filename = "sys/socket.h")] public const int SO_NOFCS; [CCode (cheader_filename = "sys/socket.h")] public const int SO_LOCK_FILTER; [CCode (cheader_filename = "sys/socket.h")] public const int SO_SELECT_ERR_QUEUE; [CCode (cheader_filename = "sys/socket.h")] public const int SO_BUSY_POLL; [CCode (cheader_filename = "sys/socket.h")] public const int SO_MAX_PACING_RATE; [CCode (cheader_filename = "sys/socket.h")] public const int SO_BPF_EXTENSIONS; [CCode (cheader_filename = "sys/socket.h")] public const int SO_INCOMING_CPU; [CCode (cheader_filename = "sys/socket.h")] public const int SO_ATTACH_BPF; [CCode (cheader_filename = "sys/socket.h")] public const int SO_DETACH_BPF; [CCode (cheader_filename = "sys/socket.h")] public const int SO_ATTACH_REUSEPORT_CBPF; [CCode (cheader_filename = "sys/socket.h")] public const int SO_ATTACH_REUSEPORT_EBPF; [CCode (cheader_filename = "sys/socket.h")] public const int SO_CNX_ADVICE; } /* * SPI (Serial Peripheral Interface) */ [CCode (cprefix = "", lower_case_cprefix = "")] namespace Spi { [CCode (cname = "spi_ioc_transfer", has_type_id = false, cheader_filename = "linux/spi/spidev.h")] public struct IocTransfer { public uint64 tx_buf; public uint64 rx_buf; public uint32 len; public uint32 speed_hz; public uint16 delay_usecs; public uint8 bits_per_word; public uint8 cs_change; public uint32 pad; } /* mode constants */ [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_CPHA; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_CPOL; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_MODE_0; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_MODE_1; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_MODE_2; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_MODE_3; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_CS_HIGH; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_LSB_FIRST; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_3WIRE; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_LOOP; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_NO_CS; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_READY; /* size */ public int SPI_MSGSIZE(int N); public int SPI_IOC_MESSAGE(int N); /* ioctls */ [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_IOC_RD_MODE; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_IOC_WR_MODE; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_IOC_RD_LSB_FIRST; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_IOC_WR_LSB_FIRST; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_IOC_RD_BITS_PER_WORD; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_IOC_WR_BITS_PER_WORD; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_IOC_RD_MAX_SPEED_HZ; [CCode (cheader_filename = "linux/spi/spidev.h")] public const int SPI_IOC_WR_MAX_SPEED_HZ; } /* * Terminal input/output */ [CCode (cprefix = "", lower_case_cprefix = "")] namespace Termios { /* * non-posix functions */ [CCode (cheader_filename = "stdlib.h")] public int ptsname_r (int fd, char[] buf); /* * non-posix flags */ [CCode (cheader_filename = "termios.h")] public const int OLCUC; /* * non-posix constants */ // flow control [CCode (cheader_filename = "termios.h")] public const int CRTSCTS; // v24 modem lines [CCode (cheader_filename = "termios.h")] public const int TIOCM_LE; [CCode (cheader_filename = "termios.h")] public const int TIOCM_DTR; [CCode (cheader_filename = "termios.h")] public const int TIOCM_RTS; [CCode (cheader_filename = "termios.h")] public const int TIOCM_ST; [CCode (cheader_filename = "termios.h")] public const int TIOCM_SR; [CCode (cheader_filename = "termios.h")] public const int TIOCM_CTS; [CCode (cheader_filename = "termios.h")] public const int TIOCM_CARM; [CCode (cheader_filename = "termios.h")] public const int TIOCM_RNG; [CCode (cheader_filename = "termios.h")] public const int TIOCM_DSR; [CCode (cheader_filename = "termios.h")] public const int TIOCM_OUT1; [CCode (cheader_filename = "termios.h")] public const int TIOCM_OUT2; [CCode (cheader_filename = "termios.h")] public const int TIOCM_LOOP; // baud rates [CCode (cheader_filename = "termios.h")] public const int B460800; [CCode (cheader_filename = "termios.h")] public const int B500000; [CCode (cheader_filename = "termios.h")] public const int B576000; [CCode (cheader_filename = "termios.h")] public const int B921600; [CCode (cheader_filename = "termios.h")] public const int B1000000; [CCode (cheader_filename = "termios.h")] public const int B1152000; [CCode (cheader_filename = "termios.h")] public const int B1500000; [CCode (cheader_filename = "termios.h")] public const int B2000000; [CCode (cheader_filename = "termios.h")] public const int B2500000; [CCode (cheader_filename = "termios.h")] public const int B3000000; [CCode (cheader_filename = "termios.h")] public const int B3500000; [CCode (cheader_filename = "termios.h")] public const int B4000000; // misc [CCode (cheader_filename = "termios.h")] public const Posix.tcflag_t CBAUD; [CCode (cheader_filename = "termios.h")] public const Posix.tcflag_t CBAUDEX; [CCode (cheader_filename = "termios.h")] public const Posix.tcflag_t ECHOCTL; [CCode (cheader_filename = "termios.h")] public const Posix.tcflag_t ECHOPRT; [CCode (cheader_filename = "termios.h")] public const Posix.tcflag_t ECHOKE; /* * ioctls */ [CCode (cheader_filename = "sys/ioctl.h")] public const int TCGETS; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSETS; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSETSW; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSETSF; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCGETA; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSETA; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSETAW; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSETAF; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSBRK; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCXONC; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCFLSH; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCEXCL; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCNXCL; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSCTTY; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCGPGRP; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSPGRP; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCOUTQ; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSTI; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCGWINSZ; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSWINSZ; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCMGET; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCMBIS; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCMBIC; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCMSET; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCGSOFTCAR; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSSOFTCAR; [CCode (cheader_filename = "sys/ioctl.h")] public const int FIONREAD; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCINQ; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCLINUX; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCCONS; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCGSERIAL; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSSERIAL; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCPKT; [CCode (cheader_filename = "sys/ioctl.h")] public const int FIONBIO; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCNOTTY; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSETD; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCGETD; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSBRKP; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSBRK; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCCBRK; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCGSID; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCGETS2; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSETS2; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSETSW2; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSETSF2; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCGRS485; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSRS485; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCGPTN; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSPTLCK; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCGETX; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSETX; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSETXF; [CCode (cheader_filename = "sys/ioctl.h")] public const int TCSETXW; [CCode (cheader_filename = "sys/ioctl.h")] public const int FIONCLEX; [CCode (cheader_filename = "sys/ioctl.h")] public const int FIOCLEX; [CCode (cheader_filename = "sys/ioctl.h")] public const int FIOASYNC; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSERCONFIG; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSERGWILD; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSERSWILD; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCGLCKTRMIOS; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSLCKTRMIOS; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSERGSTRUCT; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSERGETLSR; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSERGETMULTI; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSERSETMULTI; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCMIWAIT; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCGICOUNT; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCGHAYESESP; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSHAYESESP; [CCode (cheader_filename = "sys/ioctl.h")] public const int FIOQSIZE; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCPKT_DATA; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCPKT_FLUSHREAD; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCPKT_FLUSHWRITE; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCPKT_STOP; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCPKT_START; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCPKT_NOSTOP; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCPKT_DOSTOP; [CCode (cheader_filename = "sys/ioctl.h")] public const int TIOCSER_TEMT; } /* * Userspace Input */ [CCode (cprefix = "", lower_case_cprefix = "")] namespace UserspaceInput { [CCode (cheader_filename = "linux/uinput.h")] public const int VERSION; [CCode (cheader_filename = "linux/uinput.h")] public const int EV_UINPUT; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_FF_UPLOAD; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_FF_ERASE; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_DEV_CREATE; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_DEV_DESTROY; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_SET_EVBIT; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_SET_KEYBIT; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_SET_RELBIT; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_SET_ABSBIT; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_SET_MSCBIT; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_SET_LEDBIT; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_SET_SNDBIT; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_SET_FFBIT; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_SET_PHYS; [CCode (cheader_filename = "linux/uinput.h")] public const int UI_SET_SWBIT; [CCode (cname = "struct uinput_user_dev", cheader_filename = "linux/uinput.h")] struct UserDevice { char name[80]; Input.Id id; int ff_effects_max; int absmax[64]; int absmin[64]; int absfuzz[64]; int absflat[64]; } } /* * Virtual Terminal */ [CCode (cprefix = "", lower_case_cprefix = "")] namespace VirtualTerminal { /* constants */ [CCode (cheader_filename = "linux/vt.h")] public const int MIN_NR_CONSOLES; [CCode (cheader_filename = "linux/vt.h")] public const int MAX_NR_CONSOLES; [CCode (cheader_filename = "linux/vt.h")] public const int MAX_NR_USER_CONSOLES; [CCode (cheader_filename = "linux/vt.h")] public const int VT_OPENQRY; [CCode (cheader_filename = "linux/vt.h")] public const int VT_GETMODE; [CCode (cheader_filename = "linux/vt.h")] public const int VT_SETMODE; [CCode (cheader_filename = "linux/vt.h")] public const int VT_AUTO; [CCode (cheader_filename = "linux/vt.h")] public const int VT_PROCESS; [CCode (cheader_filename = "linux/vt.h")] public const int VT_ACKACQ; [CCode (cheader_filename = "linux/vt.h")] public const int VT_GETSTATE; [CCode (cheader_filename = "linux/vt.h")] public const int VT_SENDSIG; [CCode (cheader_filename = "linux/vt.h")] public const int VT_RELDISP; [CCode (cheader_filename = "linux/vt.h")] public const int VT_ACTIVATE; [CCode (cheader_filename = "linux/vt.h")] public const int VT_WAITACTIVE; [CCode (cheader_filename = "linux/vt.h")] public const int VT_DISALLOCATE; [CCode (cheader_filename = "linux/vt.h")] public const int VT_RESIZE; [CCode (cheader_filename = "linux/vt.h")] public const int VT_RESIZEX; [CCode (cheader_filename = "linux/vt.h")] public const int VT_LOCKSWITCH; [CCode (cheader_filename = "linux/vt.h")] public const int VT_UNLOCKSWITCH; [CCode (cheader_filename = "linux/vt.h")] public const int VT_GETHIFONTMASK; /* structs */ [CCode (cname = "struct vt_mode", has_type_id = false, cheader_filename = "linux/vt.h")] public struct Mode { public char mode; public char waitv; public int16 relsig; public int16 acqsig; public int16 frsig; } [CCode (cname = "struct vt_stat", has_type_id = false, cheader_filename = "linux/vt.h")] public struct Stat { public uint16 v_active; public uint16 v_signal; public uint16 v_state; } [CCode (cname = "struct vt_sizes", has_type_id = false, cheader_filename = "linux/vt.h")] public struct Sizes { public uint16 v_rows; public uint16 v_cols; public uint16 v_scrollsize; } [CCode (cname = "struct vt_consize", has_type_id = false, cheader_filename = "linux/vt.h")] public struct Consize { public uint16 v_rows; public uint16 v_cols; public uint16 v_vlin; public uint16 v_clin; public uint16 v_vcol; public uint16 v_ccol; } } /* * Wireless Extensions (WEXT) Infrastructure */ [CCode (cprefix = "", lower_case_cprefix = "")] namespace WirelessExtensions { [CCode (cname = "struct iw_point", has_type_id = false, cheader_filename = "linux/wireless.h", destroy_function = "")] public struct IwPoint { public void *pointer; public uint16 length; public uint16 flags; } [CCode (cname = "struct iw_param", has_type_id = false, cheader_filename = "linux/wireless.h", destroy_function = "")] public struct IwParam { public int32 value; public uint8 fixed; public uint8 disabled; public uint16 flags; } [CCode (cname = "struct iw_freq", has_type_id = false, cheader_filename = "linux/wireless.h", destroy_function = "")] public struct IwFreq { public int32 m; public int16 e; public uint8 i; public uint8 flags; } [CCode (cname = "struct iw_quality", has_type_id = false, cheader_filename = "linux/wireless.h", destroy_function = "")] public struct IwQuality { public uint8 qual; public uint8 level; public uint8 noise; public uint8 updated; } [CCode (cname = "struct iwreq_data", has_type_id = false, cheader_filename = "linux/wireless.h", destroy_function = "")] public struct IwReqData { [CCode (array_length = false)] public string name; public IwPoint essid; public IwParam nwid; public IwFreq freq; public IwParam sens; public IwParam bitrate; public IwParam txpower; public IwParam rts; public IwParam frag; public uint32 mode; public IwParam retry; public IwPoint encoding; public IwParam power; public IwQuality qual; public Posix.SockAddr ap_addr; public Posix.SockAddr addr; public IwParam param; public IwPoint data; } [CCode (cname = "struct iwreq", has_type_id = false, cheader_filename = "linux/wireless.h", destroy_function = "")] public struct IwReq { [CCode (array_length = false)] public char[] ifr_name; public IwReqData u; } /* constants */ // TBD /* ioctls */ [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWCOMMIT; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWNAME; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWNWID; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWNWID; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWFREQ; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWFREQ; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWMODE; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWMODE; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWSENS; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWSENS; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWRANGE; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWRANGE; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWPRIV; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWPRIV; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWSTATS; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWSTATS; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWSPY; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWSPY; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWTHRSPY; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWTHRSPY; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWAP; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWAP; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWAPLIST; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWSCAN; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWSCAN; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWESSID; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWESSID; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWNICKN; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWNICKN; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWRATE; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWRATE; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWRTS; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWRTS; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWFRAG; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWFRAG; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWTXPOW; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWTXPOW; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWRETRY; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWRETRY; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWENCODE; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWENCODE; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWPOWER; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWPOWER; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWGENIE; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWGENIE; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWMLME; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWAUTH; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWAUTH; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWENCODEEXT; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCGIWENCODEEXT; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCSIWPMKSA; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCIWFIRSTPRIV; [CCode (cheader_filename = "linux/wireless.h")] public const int SIOCIWLASTPRIV; } }