commit a222d266bd9062726c4662f3ffc10eddf6fbd279 Author: franklin Date: Fri Jul 12 22:00:06 2024 +0100 commit diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..18151f1 --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["@babel/preset-env", "@babel/preset-react"] +} \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..0501ad4 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +github: alyssaxuu diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9825791 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +node_modules/ +.DS_Store +.vscode/ +node_modules diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..7f196da --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +hi@alyssax.com. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a5eae15 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + + Preamble + +The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + +Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + +0. Definitions. + +"This License" refers to version 3 of the GNU General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +1. Source Code. + +The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + +The Corresponding Source for a work in source code form is that +same work. + +2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + +4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + +8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + +13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + +The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..7674176 --- /dev/null +++ b/README.md @@ -0,0 +1,90 @@ +# Screenity +[![jiewjjc232](https://github.com/alyssaxuu/screenity/assets/7581348/ed55e52e-4adf-442b-b774-6856abacdffb)](https://screenity.io) + + +The free and privacy-friendly screen recorder with no limits 🎥 + +[Get it now - it's free!](https://chrome.google.com/webstore/detail/screenity-screen-recorder/kbbdabhdfibnancpjfhlkhafgdilcnji) + +Screenity is a powerful privacy-friendly screen recorder and annotation tool to make better videos for work, education, and more. You can create stunning product demos, tutorials, presentations, or share feedback with your team - all for free. + +> You can support this project (and many others) through [GitHub Sponsors](https://github.com/sponsors/alyssaxuu)! ❤️ + +Made by [Alyssa X](https://alyssax.com) + +Screenity - The most powerful screen recorder for Chrome | Product Hunt +Featured on HackerNews + +> ❗️ Screenity has been rebuilt from the ground up, and updated to MV3. [Click here](https://help.screenity.io/getting-started/77KizPC8MHVGfpKpqdux9D/what%E2%80%99s-changed-in-the-new-version-of-screenity/bDtvcwAtw9PPesQeNH4zjE) to here to learn more about why, and what's changed in the new version. Also note that **the license has changed to [GPLv3](https://github.com/alyssaxuu/screenity/blob/master/LICENSE)**, but the older MV2 version remains MIT licensed. Make sure you read the license and the [Terms of Service](https://screenity.io/en/terms/) regarding intellectual property. + +## Table of contents + +- [Features](#features) +- [Self-hosting Screenity](#self-hosting-screenity) +- [Creating a development version](#creating-a-development-version) + - [Enabling Save to Google Drive](#enabling-save-to-google-drive) +- [Acknowledgements](#acknowledgements) + +## Features + +🎥 Make unlimited recordings of your tab, a specific area, desktop, any application, or camera
+🎙️ Record your microphone or internal audio, and use features like push to talk
+✏️ Annotate by drawing anywhere on the screen, adding text, arrows, shapes, and more
+✨ Use AI-powered camera backgrounds or blur to enhance your recordings
+🔎 Zoom in smoothly in your recordings to focus on specific areas
+🪄 Blur out any sensitive content of any page to keep it private
+✂️ Remove or add audio, cut, trim, or crop your recordings with a comprehensive editor
+👀 Highlight your clicks and cursor, and go in spotlight mode
+⏱️ Set up alarms to automatically stop your recording
+💾 Export as mp4, gif, and webm, or save the video directly to Google Drive to share a link
+⚙️ Set a countdown, hide parts of the UI, or move it anywhere
+🔒 Only you can see your videos, we don’t collect any of your data. You can even go offline!
+💙 No limits, make as many videos as you want, for as long as you want
…and much more - all for free & no sign in needed! + +## Self-hosting Screenity + +You can run Screenity locally without having to install it from the Chrome Store. Here's how: + +1. Download the latest Build.zip from the [releases page](https://github.com/alyssaxuu/screenity/releases) +2. Load the extension by pasting `chrome://extensions/` in the address bar, and [enabling developer mode](https://developer.chrome.com/docs/extensions/mv2/faq/#:~:text=You%20can%20start%20by%20turning,a%20packaged%20extension%2C%20and%20more.). +3. Drag the folder that contains the code (make sure it's a folder and not a ZIP file, so unzip first), or click on the "Load unpacked" button and locate the folder. +4. That's it, you should now be able to use Screenity locally. [Follow these instructions](#enabling-save-to-google-drive) to set up the Google Drive integration. + +## Creating a development version + +> ❗️ Note that the license has changed to [GPLv3](https://github.com/alyssaxuu/screenity/blob/master/LICENSE) for the current MV3 version (Screenity version 3.0.0 and higher). Make sure to read the license and the [Terms of Service](https://screenity.io/en/terms/) regarding intellectual property. + +1. Check if your [Node.js](https://nodejs.org/) version is >= **14**. +2. Clone this repository. +3. Run `npm install` to install the dependencies. +4. Run `npm start`. +5. Load the extension by going to `chrome://extensions/` , and [enabling developer mode](https://developer.chrome.com/docs/extensions/mv2/faq/#:~:text=You%20can%20start%20by%20turning,a%20packaged%20extension%2C%20and%20more.). +6. Click on `Load unpacked extension`. +7. Select the `build` folder. + +### Enabling Save to Google Drive + +To enable the Google Drive Upload (authorization consent screen) you must change the client_id in the manifest.json file with your linked extension key. + +You can create it accessing [Google Cloud Console](https://console.cloud.google.com/apis/credentials) and selecting Create Credential > OAuth Client ID > Chrome App. To create a persistent extension key, you can follow the steps detailed [here](https://developer.chrome.com/docs/extensions/reference/manifest/key). + +## Libraries used + +- [FFmpeg WASM](https://ffmpegwasm.netlify.app/) for editing and encoding videos +- [Tensorflow](https://github.com/tensorflow/tfjs) with the [Selfie Segmentation](https://blog.tensorflow.org/2022/01/body-segmentation.html) model +- [Fabric.js](https://github.com/fabricjs/fabric.js) for drawing and annotating +- [Radix Primitives](https://www.radix-ui.com/primitives) for the UI components +- [react-color](https://uiwjs.github.io/react-color/) for the color wheel +- [localForage](https://github.com/localForage/localForage) to help store videos offline with IndexedDB +- [Wavesurfer.js](https://wavesurfer.xyz/) to create audio waveforms in the popup and the editor +- [React Advanced Cropper](https://advanced-cropper.github.io/react-advanced-cropper/) for the cropping UI in the editor +- [fix-webm-duration](https://github.com/yusitnikov/fix-webm-duration) to add missing metadata to WEBM files + +## Acknowledgements + +- Thanks to [HelpKit](https://www.helpkit.so/) for sponsoring this project by hosting the [Screenity Help Center](https://help.screenity.io/). +- Thanks to [Mei Xuan](https://www.behance.net/meixuanloo) for helping with the Chinese translation of the extension. + +If you need any help, or want to become a Screenity expert, you can browse articles and guides in the [help center](https://help.screenity.io). You can also submit any feedback or ideas in this [form](https://tally.so/r/3ElpXq), or contact through [this page](https://help.screenity.io/contact) + +Feel free to reach out to me through email at hi@alyssax.com or [on Twitter](https://twitter.com/alyssaxuu) if you have any questions or feedback! Hope you find this useful 💜 diff --git a/build/69322449796bd80bd2e1.svg b/build/69322449796bd80bd2e1.svg new file mode 100644 index 0000000..b5b6775 --- /dev/null +++ b/build/69322449796bd80bd2e1.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/build/8c99f5a9ed25aeb087c0.png b/build/8c99f5a9ed25aeb087c0.png new file mode 100644 index 0000000..62afcf1 Binary files /dev/null and b/build/8c99f5a9ed25aeb087c0.png differ diff --git a/build/_locales/ca/messages.json b/build/_locales/ca/messages.json new file mode 100644 index 0000000..1f771bc --- /dev/null +++ b/build/_locales/ca/messages.json @@ -0,0 +1,1040 @@ +{ + "extName": { + "message": "MyTechPassport - Grava i Anota la Pantalla", + "description": "Nom de l'extensió" + }, + "extDesc": { + "message": "La millor gravadora de pantalla gratuïta per a Chrome sense límits. Captura, dibuixa, amplia, desenfoca, edita vídeos i molt més, sense necessitat de registre i privada.", + "description": "Descripció de l'extensió" + }, + "recordTab": { + "message": "Enregistra", + "description": "Etiqueta de la pestanya 'Enregistra' en el pop-up" + }, + "videosTab": { + "message": "Els teus vídeos", + "description": "Etiqueta de la pestanya 'Els teus vídeos' en el pop-up" + }, + "screenType": { + "message": "Pantalla", + "description": "Etiqueta del tipus de gravació 'Pantalla' en el pop-up" + }, + "tabType": { + "message": "Àrea", + "description": "Etiqueta del tipus de gravació 'Àrea de la pestanya' en el pop-up" + }, + "cameraType": { + "message": "Càmera", + "description": "Etiqueta del tipus de gravació 'Càmera' en el pop-up" + }, + "mockupType": { + "message": "Mockup", + "description": "Etiqueta del tipus de gravació 'Maqueta' en el pop-up" + }, + "customAreaRecordingDisabledTitle": { + "message": "Gravació d'àrea personalitzada desactivada", + "description": "Avís de desactivació de gravació d'àrea personalitzada en el pop-up per a versions de Chrome anteriors a 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Actualitza la versió de Chrome a 110+", + "description": "Descripció de l'avís de desactivació de gravació d'àrea personalitzada en el pop-up per a versions de Chrome anteriors a 104" + }, + "customAreaRecordingDisabledAction": { + "message": "Actualitza", + "description": "Acció de l'avís de desactivació de gravació d'àrea personalitzada en el pop-up per a versions de Chrome anteriors a 104" + }, + "permissionsModalTitle": { + "message": "Comprova els teus permisos", + "description": "Títol del modal d'avís de permisos de càmera / micròfon" + }, + "permissionsModalDescription": { + "message": "MyTechPassport no pot accedir a la teva càmera o micròfon. Permet l'accés fent clic a l'ícona de la càmera a la barra d'adreces.", + "description": "Descripció del modal d'avís de permisos de càmera / micròfon" + }, + "permissionsModalDismiss": { + "message": "Descarta", + "description": "Botó de descarta del modal d'avís de permisos de càmera / micròfon" + }, + "allowCameraAccessButton": { + "message": "Permet l'accés a la càmera", + "description": "Botó per permetre l'accés a la càmera" + }, + "allowMicrophoneAccessButton": { + "message": "Permet l'accés al micròfon", + "description": "Botó per permetre l'accés al micròfon" + }, + "pushToTalkLabel": { + "message": "Manté premuda una tecla per parlar", + "description": "Etiqueta de l'interruptor 'Pulsa per parlar' en el pop-up" + }, + "customAreaLabel": { + "message": "Defineix una àrea per gravar", + "description": "Etiqueta de l'interruptor 'Defineix una àrea per gravar' en el pop-up" + }, + "flipCameraLabel": { + "message": "Inverteix la càmera", + "description": "Etiqueta de l'interruptor 'Inverteix la càmera' en el pop-up" + }, + "backgroundEffectsLabel": { + "message": "Efectes de fons", + "description": "Etiqueta de l'interruptor 'Efectes de fons' en el pop-up" + }, + "recordButtonLabel": { + "message": "Inicia la gravació", + "description": "Etiqueta del botó d'iniciar la gravació en el pop-up" + }, + "recordButtonNoCameraLabel": { + "message": "Selecciona una càmera per gravar", + "description": "Etiqueta del botó d'enregistrament quan està en mode càmera i cap càmera està seleccionada" + }, + "recordButtonInProgressLabel": { + "message": "Iniciant la gravació...", + "description": "Etiqueta del botó d'iniciar la gravació en progrés en el pop-up" + }, + "showMoreOptionsLabel": { + "message": "Mostra més opcions", + "description": "Etiqueta de 'Mostra més opcions' en el pop-up" + }, + + "systemAudioLabel": { + "message": "Inclou l'àudio del sistema", + "description": "Etiqueta de l'àudio del sistema/pestanya" + }, + "hideToolbarLabel": { + "message": "Amaga la barra d'eines", + "description": "Etiqueta d'amagar la barra d'eines" + }, + "countdownLabel": { + "message": "Compte enrere", + "description": "Etiqueta de 'Compte enrere'" + }, + "alarmLabel": { + "message": "Estableix un límit de temps", + "description": "Etiqueta de 'Estableix un límit de temps'" + }, + "blurTypeLabel": { + "message": "Blur", + "description": "Etiqueta de fons 'Difumina'" + }, + "noneDropdownLabel": { + "message": "Cap", + "description": "Cap dispositiu seleccionat" + }, + "noCameraDropdownLabel": { + "message": "Sense càmera", + "description": "Cap càmera seleccionada" + }, + "noMicrophoneDropdownLabel": { + "message": "Sense micròfon", + "description": "Cap micròfon seleccionat" + }, + "selectSourceDropdownPlaceholder": { + "message": "Selecciona una font", + "description": "Marc de selecció de font" + }, + "offLabel": { + "message": "Apagat", + "description": "Etiqueta 'Apagar' a la llista desplegable" + }, + "regionWidthLabel": { + "message": "Amplada", + "description": "Etiqueta de l'amplada de la regió" + }, + "regionHeightLabel": { + "message": "Alçada", + "description": "Etiqueta de l'alçada de la regió" + }, + "addImageToastTitle": { + "message": "Fes clic per col·locar una imatge", + "description": "Missatge emergent que apareix en afegir una nova imatge" + }, + "finishRecordingTooltip": { + "message": "Finalitza la gravació", + "description": "Missatge emergent 'Finalitza la gravació'" + }, + "restartRecordingTooltip": { + "message": "Reinicia la gravació", + "description": "Missatge emergent 'Reinicia la gravació'" + }, + "pauseRecordingTooltip": { + "message": "Pausa la gravació", + "description": "Missatge emergent 'Pausa la gravació'" + }, + "resumeRecordingTooltip": { + "message": "Continua la gravació", + "description": "Missatge emergent 'Continua la gravació'" + }, + "cancelRecordingTooltip": { + "message": "Cancel·la la gravació", + "description": "Missatge emergent 'Cancel·la la gravació'" + }, + "toggleDrawingToolsTooltip": { + "message": "Eines de dibuix", + "description": "Missatge emergent 'Activa/desactiva les eines de dibuix'" + }, + "toggleBlurToolTooltip": { + "message": "Eines de difuminar", + "description": "Missatge emergent 'Activa/desactiva les eines de difuminat'" + }, + "toggleCursorOptionsTooltip": { + "message": "Opcions del cursor", + "description": "Missatge emergent 'Activa/desactiva les opcions del cursor'" + }, + "disableCameraTooltip": { + "message": "Desactiva la càmera", + "description": "Missatge emergent 'Desactiva la càmera'" + }, + "enableCameraTooltip": { + "message": "Activa la càmera", + "description": "Missatge emergent 'Activa la càmera'" + }, + "noCameraPermissionsTooltip": { + "message": "Sense permisos de càmera", + "description": "Missatge emergent 'Sense permisos de càmera'" + }, + "disableMicrophoneTooltip": { + "message": "Desactiva el micròfon", + "description": "Missatge emergent 'Desactiva el micròfon'" + }, + "enableMicrophoneTooltip": { + "message": "Activa el micròfon", + "description": "Missatge emergent 'Activa el micròfon'" + }, + "noMicrophonePermissionsTooltip": { + "message": "Sense permisos de micròfon", + "description": "Missatge emergent 'Sense permisos de micròfon'" + }, + "selectToolTooltip": { + "message": "Eina de selecció", + "description": "Missatge emergent 'Eina de selecció'" + }, + "penToolTooltip": { + "message": "Llapis", + "description": "Missatge emergent 'Eina de llapis'" + }, + "highlighterToolTooltip": { + "message": "Subratllador", + "description": "Missatge emergent 'Eina de ressaltar'" + }, + "eraserToolTooltip": { + "message": "Goma", + "description": "Missatge emergent 'Eina d'esborrar'" + }, + "textToolTooltip": { + "message": "Text", + "description": "Missatge emergent 'Eina de text'" + }, + "shapeToolTooltip": { + "message": "Formes", + "description": "Missatge emergent 'Eina de formes'" + }, + "arrowToolTooltip": { + "message": "Fletxa", + "description": "Missatge emergent 'Eina de fletxa'" + }, + "imageToolTooltip": { + "message": "Imatges", + "description": "Missatge emergent 'Eina d'imatge'" + }, + "undoTooltip": { + "message": "Desfés", + "description": "Missatge emergent 'Desfés'" + }, + "redoTooltip": { + "message": "Refés", + "description": "Missatge emergent 'Refés'" + }, + "clearCanvasTooltip": { + "message": "Esborra-ho tot", + "description": "Missatge emergent 'Neteja el llenç'" + }, + "moreColorsTooltip": { + "message": "Més colors", + "description": "Missatge emergent 'Més colors'" + }, + "thickStrokeTooltip": { + "message": "Traç gruixut", + "description": "Missatge emergent 'Traç gruixut'" + }, + "mediumStrokeTooltip": { + "message": "Traç mitjà", + "description": "Missatge emergent 'Traç mitjà'" + }, + "thinStrokeTooltip": { + "message": "Traç prim", + "description": "Missatge emergent 'Traç prim'" + }, + "togglePictureinPictureModeTooltip": { + "message": "Activa/desactiva el mode Picture-in-Picture (PIP)", + "description": "Missatge emergent 'Activa/desactiva el mode imatge en imatge'" + }, + "toggleFillTooltip": { + "message": "Activa/desactiva els contorns", + "description": "Missatge emergent 'Activa/desactiva el farciment'" + }, + "drawingModeToast": { + "message": "Mode de dibuix", + "description": "Missatge emergent 'Mode de dibuix'" + }, + "blurModeToast": { + "message": "Mode de difuminat", + "description": "Missatge emergent 'Mode de difuminat'" + }, + "clearBlurredElementsTooltip": { + "message": "Restableix els elements difuminats", + "description": "Missatge emergent 'Neteja tots els elements difuminats'" + }, + "highlightClicksTooltip": { + "message": "Ressalta els clics", + "description": "Missatge emergent 'Ressalta les clicades'" + }, + "highlightCursorTooltip": { + "message": "Ressalta el cursor", + "description": "Missatge emergent 'Ressalta el cursor'" + }, + "spotlightCursorTooltip": { + "message": "Enfoca el cursor", + "description": "Missatge emergent 'Projecció del cursor'" + }, + "permissionsModalNoShowAgain": { + "message": "No tornis a mostrar-ho", + "description": "Botó de descarta del modal d'avís de permisos" + }, + "restartModalTitle": { + "message": "Segur que vols reiniciar la gravació?", + "description": "Títol del modal de reiniciar la gravació" + }, + "restartModalDescription": { + "message": "Perdràs tot el progrés del vídeo.", + "description": "Descripció del modal de reiniciar la gravació" + }, + "restartModalRestart": { + "message": "Reinicia la gravació", + "description": "Botó de reiniciar la gravació en el modal" + }, + "restartModalResume": { + "message": "Continua la gravació", + "description": "Botó de continuar la gravació en el modal" + }, + "discardModalTitle": { + "message": "Segur que vols descartar la gravació?", + "description": "Títol del modal de descartar la gravació" + }, + "discardModalDescription": { + "message": "Perdràs tot el progrés del vídeo.", + "description": "Descripció del modal de descartar la gravació" + }, + "discardModalDiscard": { + "message": "Descarta la gravació", + "description": "Botó de descartar la gravació en el modal" + }, + "discardModalResume": { + "message": "Continua la gravació", + "description": "Botó de continuar la gravació en el modal" + }, + "recorderSelectTitle": { + "message": "Escull què vols enregistrar", + "description": "Títol a la pàgina d'enregistrament" + }, + "recorderSelectProgressTitle": { + "message": "Enregistrant...", + "description": "Títol a la pàgina d'enregistrament mentre s'està gravant" + }, + "recorderSelectDescription": { + "message": "Deixa aquesta pestanya oberta. Es tancarà quan la gravació s'hagi guardat.", + "description": "Descripció a la pàgina d'enregistrament" + }, + "sandboxProgressTitle": { + "message": "Preparant la gravació...", + "description": "Títol a la pàgina de l'àrea de proves mentre es grava/guarda" + }, + "sandboxProgressDescription": { + "message": "Deixa aquesta pestanya oberta. S'actualitzarà amb la teva gravació quan estigui llesta.", + "description": "Descripció a la pàgina de l'àrea de proves mentre es grava/guarda" + }, + "sandboxEditorMainTitle": { + "message": "Editor", + "description": "Títol a la navegació de la pàgina de l'editor de l'àrea de proves" + }, + "sandboxEditorCancelButton": { + "message": "Cancel·la", + "description": "Botó de cancel·lació a la pàgina de l'editor de l'àrea de proves" + }, + "sandboxEditorRevertButton": { + "message": "Torna a l'original", + "description": "Botó de revertir a l'original a la pàgina de l'editor de l'àrea de proves" + }, + "sandboxEditorResetButton": { + "message": "Restableix", + "description": "Botó de restabliment a la pàgina de l'editor de l'àrea de proves" + }, + "sandboxEditorSaveButton": { + "message": "Desa els canvis", + "description": "Botó de desar a la pàgina de l'editor de l'àrea de proves" + }, + "sandboxEditorSaveProgressButton": { + "message": "Guardant...", + "description": "Botó de desar a la pàgina de l'editor de l'àrea de proves mentre es guarda" + }, + "sandboxAudioDragAndDrop": { + "message": "Arrossega el fitxer d'àudio", + "description": "Arrossega i deixa fitxer d'àudio a la pàgina de l'editor de l'àrea de proves" + }, + "sandboxAudioOrBrowse": { + "message": "O fes clic per buscar", + "description": "O fes clic per buscar fitxer d'àudio a la pàgina de l'editor de l'àrea de proves" + }, + "sandboxAudioSettingsTitle": { + "message": "Configuració", + "description": "Títol de configuració d'àudio a la pàgina de l'editor de l'àrea de proves" + }, + "sandboxAudioVolumeLabel": { + "message": "Volum", + "description": "Etiqueta de volum d'àudio a la pàgina de l'editor de l'àrea de proves" + }, + "sandboxAudioUpdateButton": { + "message": "Aplica", + "description": "Botó d'actualització d'àudio a la pàgina de l'editor de l'àrea de proves" + }, + "sandboxCropTitle": { + "message": "Retalla", + "description": "Títol de retall a la pàgina de l'editor de l'àrea de proves" + }, + "widthLabel": { + "message": "Amplada", + "description": "Etiqueta d'amplada per a les propietats" + }, + "heightLabel": { + "message": "Alçada", + "description": "Etiqueta d'alçada per a les propietats" + }, + "leftLabel": { + "message": "Esquerra", + "description": "Etiqueta d'esquerra per a les propietats" + }, + "topLabel": { + "message": "Dalt", + "description": "Etiqueta de dalt per a les propietats" + }, + "sandboxEditorTrimInfo": { + "message": "Arrossega els controls i utilitza els botons a l'esquerra per editar la secció seleccionada.", + "description": "Informació sobre el retall a l'editor de l'àrea de proves" + }, + "sandboxEditorTrimButton": { + "message": "Retalla el vídeo", + "description": "Botó de retall a l'editor de l'àrea de proves" + }, + "sandboxEditorTrimProgressButton": { + "message": "Retallant...", + "description": "Botó de retall a l'editor de l'àrea de proves mentre es retalla" + }, + "sandboxEditorCutButton": { + "message": "Elimina la secció", + "description": "Botó de tall a l'editor de l'àrea de proves" + }, + "sandboxEditorCutProgressButton": { + "message": "Eliminant...", + "description": "Botó de tall a l'editor de l'àrea de proves mentre es talla" + }, + "sandboxEditorMuteButton": { + "message": "Silencia l'àudio", + "description": "Botó de silenciar a l'editor de l'àrea de proves" + }, + "sandboxEditorMuteProgressButton": { + "message": "Silenciant...", + "description": "Botó de silenciar a l'editor de l'àrea de proves mentre es silencia" + }, + "learnMoreDot": { + "message": "Aprèn més.", + "description": "Aprèn més amb un punt" + }, + "undoLabel": { + "message": "Desfés", + "description": "Etiqueta de desfés" + }, + "redoLabel": { + "message": "Refés", + "description": "Etiqueta de refés" + }, + "leaveReview": { + "message": "Deixa una ressenya", + "description": "Botó de deixar una ressenya" + }, + "followForUpdates": { + "message": "Mantén-te informat", + "description": "Botó de seguir per romandre al corrent de les novetats" + }, + "offlineLabelTitle": { + "message": "No tens connexió", + "description": "Etiqueta sense connexió" + }, + "offlineLabelDescription": { + "message": "Algunes característiques no estan disponibles", + "description": "Descripció de l'etiqueta sense connexió" + }, + "offlineLabelTryAgain": { + "message": "Torna-ho a provar", + "description": "Botó de tornar-ho a provar de l'etiqueta sense connexió" + }, + "updateChromeLabelTitle": { + "message": "Cal actualitzar Chrome", + "description": "Etiqueta d'actualització de Chrome" + }, + "updateChromeLabelDescription": { + "message": "Actualitza per accedir més funcionalitat", + "description": "Descripció de l'etiqueta d'actualització de Chrome" + }, + "learnMoreLabel": { + "message": "Aprèn més", + "description": "Botó d'aprèn més" + }, + "overLimitLabelTitle": { + "message": "Vídeo massa llarg per processar en el teu dispositiu", + "description": "Etiqueta de límit de més de 5 minuts a l'editor" + }, + "overLimitLabelDescription": { + "message": "L'edició i la descàrrega en format MP4 no estan disponibles", + "description": "Descripció de límit de més de 5 minuts a l'editor" + }, + "videoProcessingLabelTitle": { + "message": "El vídeo s'està processant...", + "description": "Etiqueta de processament de vídeo a l'editor" + }, + "videoProcessingLabelDescription": { + "message": "Subscriu-te per editar vídeos més ràpid", + "description": "Descripció del processament de vídeo a l'editor" + }, + "sandboxEditTitle": { + "message": "Edita", + "description": "Títol d'edició a la pàgina de l'editor de l'àrea de proves" + }, + "noConnectionLabel": { + "message": "Sense connexió", + "description": "Etiqueta sense connexió" + }, + "notAvailableLabel": { + "message": "No està disponible", + "description": "Etiqueta no disponible" + }, + "editButtonTitle": { + "message": "Edita el vídeo", + "description": "Etiqueta de botó de retall" + }, + "editButtonDescription": { + "message": "Talla o silencia el vídeo", + "description": "Etiqueta de retall" + }, + "preparingLabel": { + "message": "Preparant el vídeo, un moment...", + "description": "Etiqueta de preparació" + }, + "cropButtonTitle": { + "message": "Retalla", + "description": "Etiqueta de botó de retall" + }, + "cropButtonDescription": { + "message": "Retalla i redimensiona el vídeo", + "description": "Etiqueta de retall" + }, + "addAudioButtonTitle": { + "message": "Afegeix àudio", + "description": "Etiqueta de botó d'afegir àudio" + }, + "addAudioButtonDescription": { + "message": "Puja el teu propi àudio per afegir al vídeo", + "description": "Etiqueta d'afegir àudio" + }, + "sandboxSaveTitle": { + "message": "Integracions", + "description": "Títol de desar a la pàgina de l'editor de l'àrea de proves" + }, + "signOutDriveLabel": { + "message": "Tanca la sessió de Google Drive", + "description": "Etiqueta de tancar la sessió a Google Drive" + }, + "savingDriveLabel": { + "message": "Guardant...", + "description": "Etiqueta de guardat a Google Drive" + }, + "saveDriveButtonTitle": { + "message": "Guarda el vídeo al Google Drive", + "description": "Botó de desar a Google Drive" + }, + "saveDriveButtonDescription": { + "message": "Desa el vídeo a Drive", + "description": "Etiqueta de desar a Google Drive" + }, + "signInDriveLabel": { + "message": "Inicia la sessió i guarda al Google Drive", + "description": "Etiqueta d'iniciar la sessió a Google Drive" + }, + "sandboxExportTitle": { + "message": "Exporta", + "description": "Títol d'exportació a la pàgina de l'editor de l'àrea de proves" + }, + "downloadingLabel": { + "message": "Descarregant...", + "description": "Etiqueta de descàrrega" + }, + "downloadWEBMButtonTitle": { + "message": "Descarrega com a .webm", + "description": "Botó de descàrrega de WEBM" + }, + "downloadWEBMButtonDescription": { + "message": "Exporta un vídeo .webm", + "description": "Etiqueta de descàrrega de WEBM" + }, + "downloadMP4ButtonTitle": { + "message": "Descarrega com a .mp4", + "description": "Botó de descàrrega de MP4" + }, + "downloadMP4ButtonDescription": { + "message": "Exporta un vídeo .mp4 (recomanat)", + "description": "Etiqueta de descàrrega de MP4" + }, + "downloadGIFButtonTitle": { + "message": "Descarrega com a .gif", + "description": "Botó de descàrrega de GIF" + }, + "downloadGIFButtonDescription": { + "message": "Exporta un GIF (màxim 30 segons)", + "description": "Etiqueta de descàrrega de GIF" + }, + "shareModalSandboxTitle": { + "message": "Comparteix els teus vídeos amb un enllaç", + "description": "Títol del modal de compartir a la pàgina de l'editor de proves" + }, + "shareModalSandboxDescription": { + "message": "Properament! Deixa el teu correu electrònic per estar informat i rebre notificacions quan estigui disponible.", + "description": "Descripció del modal de compartir a la pàgina de l'editor de proves" + }, + "shareModalSandboxButton": { + "message": "Apunta't a la llista d'espera", + "description": "Missatge de correu electrònic del modal de compartir a la pàgina de l'editor de proves" + }, + "shareSandboxButton": { + "message": "Comparteix", + "description": "Botó de compartir a la pàgina de l'editor de proves" + }, + "replaceAudioEditor": { + "message": "Substitueix l'àudio", + "description": "Botó de substitució d'àudio a l'editor" + }, + "zoomToPointPopup": { + "message": "Fes zoom al cursor", + "description": "Finestra emergent de zoom a un punt" + }, + "stayInPagePopup": { + "message": "Mantén-te a la pàgina en gravar", + "description": "Finestra emergent de mantenir-se a la pàgina" + }, + "micReminderPopup": { + "message": "Mostra un avís si el micròfon està apagat", + "description": "Finestra emergent de recordança de micròfon" + }, + "helpPopup": { + "message": "Ajuda", + "description": "Botó de finestra emergent d'ajuda" + }, + "pausedRecordingToast": { + "message": "Gravació aturada. Prem el botó de reproducció per continuar.", + "description": "Títol del modal de gravació en pausa" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport no té permís per gravar la pantalla", + "description": "Títol del modal de permisos" + }, + "chromePermissionsModalDescription": { + "message": "Per habilitar la gravació de pantalla, has de concedir permisos adicionals a MyTechPassport.", + "description": "Descripció del modal de permisos" + }, + "chromePermissionsModalAction": { + "message": "Habilita la gravació de pantalla", + "description": "Acció del modal de permisos" + }, + "chromePermissionsModalCancel": { + "message": "Cancel·la", + "description": "Cancel·la del modal de permisos" + }, + "micMutedModalTitle": { + "message": "El teu micròfon està apagat", + "description": "Títol del modal de micròfon apagat" + }, + "micMutedModalDescription": { + "message": "Per incloure àudio a la teva gravació, hauràs d'activar el teu micròfon. Vols continuar sense àudio?", + "description": "Descripció del modal de micròfon apagat" + }, + "micMutedModalAction": { + "message": "Sí, continua", + "description": "Continua del modal de micròfon apagat" + }, + "micMutedModalCancel": { + "message": "Cancel·la", + "description": "Cancel·la del modal de micròfon apagat" + }, + "setupTitle": { + "message": "Comença a utilitzar MyTechPassport en tres passos senzills:", + "description": "Títol dels passos de configuració" + }, + "setupStep1Before": { + "message": "1- Fes clic a la icona de ", + "description": "Pas 1 de configuració, abans de la icona. Necessita un espai al final." + }, + "setupStep1After": { + "message": " extensions", + "description": "Pas 1 de configuració, després de la icona. Necessita un espai al principi." + }, + "setupStep2Before": { + "message": "2- Prem la icona de ", + "description": "Pas 2 de configuració, abans de la icona. Necessita un espai al final." + }, + "setupStep2After": { + "message": " destacar", + "description": "Pas 2 de configuració, després de la icona. Necessita un espai al principi." + }, + "setupStep3Before": { + "message": "3- Fes clic a la icona de ", + "description": "Pas 3 de configuració, abans de la icona. Necessita un espai al final." + }, + "setupStep3After": { + "message": " MyTechPassport per començar", + "description": "Pas 3 de configuració, després de la icona. Necessita un espai al principi." + }, + "setupCompleteTitle": { + "message": "Fantàstic! Ja estàs llest", + "description": "Títol de configuració completada" + }, + "setupCompleteDescription": { + "message": "Comença a fer una gravació aquí o en qualsevol altra pestanya.", + "description": "Descripció de configuració completada" + }, + "clickHereDrawOnboarding": { + "message": "Fes clic aquí per dibuixar", + "description": "Onboarding per fer clic aquí" + }, + "countdownMessage": { + "message": "Relaxa't. Fes clic en qualsevol lloc per aturar el compte enrere.", + "description": "Missatge de compte enrere" + }, + + "sandboxEditorTooSmallInfo": { + "message": "L'edició del vídeo pot ser imprecisa a causa dels intervals entre fotogrames en duracions curtes.", + "description": "Informació sobre l'editor que és massa petit" + }, + "processingBannerEditor": { + "message": "El vídeo s'està processant, la reproducció pot ser imprecisa o interrompuda.", + "description": "Bàner de processament a l'editor" + }, + "croppingInfoTitle": { + "message": "Retallar el vídeo pot trigar una estona", + "description": "Títol de la informació de retallat" + }, + "croppingInfoDescription": { + "message": "Subscriu-te per editar vídeos més ràpid", + "description": "Descripció de la informació de retallat" + }, + "micOnToast": { + "message": "Microfon activat", + "description": "Títol del missatge emergent amb el microfon habilitat" + }, + "micOffToast": { + "message": "Microfon desactivat", + "description": "Títol del missatge emergent amb el microfon deshabilitat" + }, + "hideUIAlerts": { + "message": "Amaga les notificacions d'eines", + "description": "Botó per amagar les alertes de la interfície" + }, + "noShowAgain": { + "message": "No tornis a mostrar", + "description": "Botó de no tornis a mostrar" + }, + "toolbarHoverOnly": { + "message": "Amaga els controls quan no els utilitzis", + "description": "Només mostra el botó de la barra d'eines en passar el ratolí" + }, + "stopRecording": { + "message": "Atura la gravació", + "description": "Stop recording button in recording screen" + }, + "updateAnnouncementTitle": { + "message": "Benvingut al nou MyTechPassport!", + "description": "Títol de l'anunci d'actualització per als usuaris existents" + }, + "updateAnnouncementDescription": { + "message": "Hem actualitzat el disseny i desenvolupat noves funcionalitats, però no et preocupis, segueix sent la mateixa extensió gratuïta, privada i de codi obert.", + "description": "Descripció de l'anunci d'actualització per als usuaris existents" + }, + "updateAnnouncementLearnMore": { + "message": "Obtén més informació sobre la actualització.", + "description": "Enllaç 'Obtenir més informació' de l'anunci d'actualització per als usuaris existents" + }, + "updateAnnouncementButton": { + "message": "Començar", + "description": "Botó de l'anunci d'actualització per als usuaris existents" + }, + "streamErrorModalTitle": { + "message": "Error en iniciar la gravació", + "description": "Títol del modal d'error de transmissió" + }, + "streamErrorModalDescription": { + "message": "Hi ha hagut un error en iniciar la gravació. Reinicia el teu navegador i torna-ho a provar. Si el problema persisteix, si us plau, posa't en contacte amb nosaltres a support@MyTechPassport.io.", + "description": "Descripció del modal d'error de transmissió" + }, + "highestQuality": { + "message": "Qualitat més alta", + "description": "Etiqueta de commutació de la qualitat més alta al quadre emergent" + }, + "restoreRecording": { + "message": "Restaurar l'última gravació", + "description": "Botó per restaurar l'última gravació al quadre emergent" + }, + "havingIssuesButton": { + "message": "Tens problemes?", + "description": "Botó de problemes a l'editor" + }, + "havingIssuesModalTitle": { + "message": "No pots veure la teva gravació?", + "description": "Títol del modal de problemes a l'editor" + }, + "havingIssuesModalDescription": { + "message": "Si has completat la teva gravació i et trobes en aquesta pàgina sense veure el teu vídeo, pots intentar descarregar les dades de vídeo en brut si estan disponibles. També pots posar-te en contacte i enviar un informe d'error.", + "description": "Descripció del modal de problemes a l'editor" + }, + "havingIssuesModalButton": { + "message": "Descarregar dades de vídeo en brut", + "description": "Botó del modal de problemes a l'editor" + }, + "havingIssuesModalButton2": { + "message": "Informar d'un error", + "description": "Segon botó del modal de problemes a l'editor" + }, + "noRecordingFound": { + "message": "No s'ha trobat cap gravació, ho sento :(", + "description": "Alerta de no s'ha trobat cap gravació a l'editor" + }, + "memoryLimitTitle": { + "message": "S'ha assolit el límit de memòria", + "description": "Títol de límit de memòria assolit" + }, + "memoryLimitDescription": { + "message": "El teu dispositiu ha esgotat la memòria disponible per a la gravació, la qual cosa ha provocat una finalització automàtica de la gravació. Si desitges gravar durant més temps, considera la possibilitat de reduir la qualitat del vídeo o lliurar espai al teu dispositiu.", + "description": "Descripció de límit de memòria assolit" + }, + "understoodButton": { + "message": "Entès", + "description": "Botó d'entès" + }, + "notEnoughSpaceTitle": { + "message": "Espai insuficient", + "description": "Títol d'espai insuficient" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassport necessita almenys 1 GB d'espai lliure per a la gravació. Si us plau, allibera espai i torna-ho a intentar.", + "description": "Descripció d'espai insuficient" + }, + "clearSpaceButton": { + "message": "Esborra gravacions anteriors", + "description": "Botó d'esborra gravacions anteriors" + }, + "sandboxAdvancedTitle": { + "message": "Avançat", + "description": "Secció avançada a la pàgina de l'editor en l'entorn segur" + }, + "rawRecordingButtonTitle": { + "message": "Descarrega l'arxiu de vídeo en brut", + "description": "Botó de descàrrega de gravació en brut" + }, + "rawRecordingButtonDescription": { + "message": "Exporta les dades d'enregistrament originals", + "description": "Etiqueta de descàrrega de gravació en brut" + }, + "troubleshootButtonTitle": { + "message": "Obtén ajuda amb la teva gravació", + "description": "Botó de solució de problemes" + }, + "troubleShootButtonDescription": { + "message": "Recupera el teu vídeo i resol altres problemes", + "description": "Etiqueta de solució de problemes" + }, + "rawRecordingModalTitle": { + "message": "Descarrega l'arxiu de vídeo en brut", + "description": "Títol del modal de gravació en brut" + }, + "rawRecordingModalDescription": { + "message": "L'arxiu de vídeo en brut és l'arxiu original enregistrat per MyTechPassport. Aquest vídeo no ha estat processat ni editat, per la qual cosa pot ser molt gran i potser no es pot reproduir en tots els dispositius. Si tens problemes amb el vídeo processat, pots fer servir aquest arxiu per recuperar el teu vídeo.", + "description": "Descripció del modal de gravació en brut" + }, + "rawRecordingModalButton": { + "message": "Descarrega", + "description": "Botó del modal de gravació en brut" + }, + "troubleshootModalTitle": { + "message": "Descarrega la informació del sistema i les dades de vídeo per a l'enviament i la solució de problemes", + "description": "Títol del modal de solució de problemes" + }, + "troubleshootModalDescription": { + "message": "Després de la descàrrega, envia l'arxiu a support@MyTechPassport.io amb qualsevol informació rellevant. Farem servir aquestes dades per ajudar-te a solucionar qualsevol problema que tinguis amb l'extensió i, si és possible, recuperar el teu vídeo.", + "description": "Descripció del modal de solució de problemes" + }, + "troubleshootModalButton": { + "message": "Descarrega", + "description": "Botó del modal de solució de problemes" + }, + "overLimitModalTitle": { + "message": "El vídeo és massa llarg per processar-se al teu dispositiu", + "description": "Títol del modal de límit superior a 5 minuts" + }, + "overLimitModalDescription": { + "message": "Com que MyTechPassport és completament privat i s'executa localment, està limitat pel maquinari del teu dispositiu. Processar un vídeo d'aquesta longitud trigarà massa temps i serà molt intensiu en recursos. No et preocupis, encara pots descarregar l'arxiu WEBM o la gravació en brut, però l'edició i l'exportació a MP4 no estan disponibles. Dicho això, encara pots intentar processar el vídeo de tota manera si entens els riscos.", + "description": "Descripció del modal de límit superior a 5 minuts" + }, + "overLimitModalButton": { + "message": "Entenc el risc, intenta-ho igualment", + "description": "Botó del modal de límit superior a 5 minuts" + }, + "overLimitModalLearnMore": { + "message": "Obtén més informació sobre el processament de vídeos llargs.", + "description": "Enllaç 'Obtén més informació' del modal de límit superior a 5 minuts amb un punt" + }, + "recoveryModeTitle": { + "message": "Mode de recuperació", + "description": "Títol del mode de recuperació" + }, + "downloadForTroubleshootingOption": { + "message": "Descarregar dades per solucionar problemes", + "description": "Opció de descàrrega per solucionar problemes" + }, + "getHelpNav": { + "message": "Centre d'ajuda", + "description": "Element de navegació d'ajuda" + }, + "audioWarningTitle": { + "message": "Enregistra l'àudio de la pàgina", + "description": "Títol d'avís d'àudio" + }, + "audioWarningDescription": { + "message": "Per enregistrar l'àudio d'aquesta pàgina, has de canviar a '$tab$'.", + "description": "Descripció d'avís d'àudio", + "placeholders": { + "tab": { + "content": "$1", + "example": "Àrea de la pestanya" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Extensió no compatible a la pestanya", + "description": "Títol d'extensió no compatible a la pestanya" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport no era compatible a la teva pestanya anterior. No obstant això, pots començar la gravació aquí i després canviar a la pestanya, però la teva càmera i la barra de ferramentes no seran visibles.", + "description": "Descripció d'extensió no compatible a la pestanya" + }, + "backupsTitle": { + "message": "Configura una còpia de seguretat local per a les teves gravacions de MyTechPassport", + "description": "Títol de còpies de seguretat" + }, + "backupsDescription1": { + "message": "Mantingues una còpia de totes les gravacions que facis. Si no configures còpies de seguretat, les teves gravacions només es guardaran quan decideixis descarregar-les.", + "description": "Descripció de còpies de seguretat" + }, + "backupsDescription2": { + "message": "Potser necessitaràs crear una nova carpeta primer si intents guardar-ho a Descàrregues o altres carpetes del sistema.", + "description": "Descripció de còpies de seguretat" + }, + "backupsSelectFolder": { + "message": "Selecciona una carpeta", + "description": "Botó Selecciona carpeta" + }, + "backupsNotNow": { + "message": "Ara no", + "description": "Botó Ara no" + }, + "backupsOnTitle": { + "message": "Les teves gravacions s'estan sincronitzant localment", + "description": "Títol de còpies de seguretat actives" + }, + "backupsOnDescription": { + "message": "Per evitar sol·licitar permisos cada vegada que gravis, et recomanem deixar aquesta pestanya oberta.", + "description": "Descripció de còpies de seguretat actives" + }, + "backupsClose": { + "message": "Tanca la pestanya de tota manera", + "description": "Botó Tanca la pestanya de tota manera" + }, + "backupsStop": { + "message": "Atura les còpies de seguretat de totes les gravacions", + "description": "Botó Atura còpies de seguretat" + }, + "backupsConfirmTitle": { + "message": "Per favor, torna a confirmar l'accés a la teva carpeta de còpies de seguretat local de MyTechPassport", + "description": "Títol de confirmació de còpies de seguretat" + }, + "backupsConfirmDescription": { + "message": "Ho sentim, però necessitem el teu permís una vegada més per continuar fent còpies locals de les teves gravacions. Desafortunadament, haurem de preguntar cada vegada que tanquis aquesta pestanya, el que pot passar si tanques el navegador o reinicies el teu ordinador.", + "description": "Descripció de confirmació de còpies de seguretat" + }, + "backupsConfirmAllow": { + "message": "Permet a MyTechPassport continuar fent còpies de seguretat de les gravacions", + "description": "Botó Permet en la confirmació de còpies de seguretat" + }, + "backupsToggle": { + "message": "Fes còpies de seguretat de les gravacions", + "description": "Etiqueta d'alternar còpies de seguretat" + }, + "backupPermissionFailTitle": { + "message": "Permís no atorgat per fer una còpia de seguretat de la gravació", + "description": "Títol de fallada de permís de còpia de seguretat" + }, + "backupPermissionFailDescription": { + "message": "No has seleccionat cap carpeta per fer una còpia local de les gravacions. Depenent de la versió del teu navegador o sistema operatiu, potser se't demanarà seleccionar la carpeta cada vegada que comencis a gravar. Pots intentar-ho de nou o desactivar les còpies de seguretat per complet si prefereixes no atorgar permisos repetidament.", + "description": "Descripció de fallada de permís de còpia de seguretat" + }, + "recordAudioWarningMacTitle": { + "message": "Enregistra l'audio de l'ordinador", + "description": "Títol d'avís d'àudio per a macOS" + }, + "recordAudioWarningMacDescription": { + "message": "A macOS, només pots enregistrar l'àudio de les pestanyes. Seleccioneu l'opció 'Pestanya de Chrome' i assegureu-vos que 'Comparteix també l'audio de la pestanya' estigui habilitat.", + "description": "Descripció d'avís d'àudio per a macOS" + }, + "recordAudioWarningOtherTitle": { + "message": "Enregistra l'audio de l'ordinador", + "description": "Títol d'avís d'àudio per a altres sistemes" + }, + "recordAudioWarningOtherDescription": { + "message": "Assegureu-vos d'activar l'opció 'Comparteix l'audio del sistema' si voleu enregistrar l'audio de l'ordinador. Si no veieu aquesta opció, proveu d'actualitzar Chrome o canviar a l'opció d'enregistrament de pestanyes.", + "description": "Descripció d'avís d'àudio per a altres sistemes" + }, + + "maxResolutionLabel": { + "message": "Resolució màxima", + "description": "Etiqueta de resolució màxima al menú de configuració" + }, + "maxFPSLabel": { + "message": "FPS màxims", + "description": "Etiqueta de FPS màxims al menú de configuració" + }, + + "notEnoughRAM": { + "message": "No hi ha prou RAM", + "description": "Etiqueta 'No hi ha prou RAM' al menú de configuració" + }, + "resizeWindowLabel": { + "message": "Redimensionar finestra", + "description": "Etiqueta de redimensionar finestra al menú de configuració" + }, + "screenTooSmallTooltip": { + "message": "La pantalla és massa petita per a aquesta resolució", + "description": "Consell per a pantalles massa petites al menú de configuració" + }, + "maxResolutionTooltip": { + "message": "No es pot enregistrar en aquesta resolució al seu dispositiu", + "description": "Consell per a la resolució màxima al menú de configuració" + }, + "permissionsModalReview": { + "message": "Revisar permisos", + "description": "Botó de revisar permisos" + } +} diff --git a/build/_locales/de/messages.json b/build/_locales/de/messages.json new file mode 100644 index 0000000..2143217 --- /dev/null +++ b/build/_locales/de/messages.json @@ -0,0 +1,1040 @@ +{ + "extName": { + "message": "MyTechPassport - Bildschirmaufnahme & Beschriftung", + "description": "Erweiterungsname" + }, + "extDesc": { + "message": "Der beste kostenlose Bildschirmrekorder ohne Einschränkungen. Erfassen, kommentieren, zoomen, verwischen, Videos bearbeiten und mehr - ohne Anmeldung erforderlich und datenschutzfreundlich.", + "description": "Beschreibung der Erweiterung" + }, + "recordTab": { + "message": "Aufnehmen", + "description": "Registerkarte 'Aufnehmen' in der Popup-Ansicht" + }, + "videosTab": { + "message": "Ihre Videos", + "description": "Registerkarte 'Ihre Videos' in der Popup-Ansicht" + }, + "screenType": { + "message": "Bildschirm", + "description": "Label für die Aufnahmeart 'Bildschirm' in der Popup-Ansicht" + }, + "tabType": { + "message": "Tab-Bereich", + "description": "Label für die Aufnahmeart 'Tab-Bereich' in der Popup-Ansicht" + }, + "cameraType": { + "message": "Kamera", + "description": "Label für die Aufnahmeart 'Kamera' in der Popup-Ansicht" + }, + "mockupType": { + "message": "Mockup", + "description": "Label für die Aufnahmeart 'Mockup' in der Popup-Ansicht" + }, + "customAreaRecordingDisabledTitle": { + "message": "Benutzerdefinierte Bereichsaufnahme deaktiviert", + "description": "Warnung 'Benutzerdefinierte Bereichsaufnahme deaktiviert' in der Popup-Ansicht für Chrome-Versionen älter als 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Aktualisieren Sie die Chrome-Version auf 110+", + "description": "Beschreibung der Warnung 'Benutzerdefinierte Bereichsaufnahme deaktiviert' in der Popup-Ansicht für Chrome-Versionen älter als 104" + }, + "customAreaRecordingDisabledAction": { + "message": "Aktualisieren", + "description": "Aktion der Warnung 'Benutzerdefinierte Bereichsaufnahme deaktiviert' in der Popup-Ansicht für Chrome-Versionen älter als 104" + }, + "permissionsModalTitle": { + "message": "Überprüfen Sie Ihre Berechtigungen", + "description": "Titel des Modals für Kamera- / Mikrofonberechtigungen" + }, + "permissionsModalDescription": { + "message": "Es scheint, dass MyTechPassport keinen Zugriff auf Ihre Kamera oder Ihr Mikrofon hat. Stellen Sie sicher, dass Sie den Zugriff zulassen, indem Sie auf das Kamera-Symbol in der Adressleiste klicken.", + "description": "Beschreibung des Modals für Kamera- / Mikrofonberechtigungen" + }, + "permissionsModalDismiss": { + "message": "Verwerfen", + "description": "Schaltfläche 'Verwerfen' im Modal für Kamera- / Mikrofonberechtigungen" + }, + "allowCameraAccessButton": { + "message": "Kamerazugriff zulassen", + "description": "Schaltfläche 'Kamerazugriff zulassen'" + }, + "allowMicrophoneAccessButton": { + "message": "Mikrofonzugriff zulassen", + "description": "Schaltfläche 'Mikrofonzugriff zulassen'" + }, + "pushToTalkLabel": { + "message": "Push-to-Talk", + "description": "Label für den Schalter 'Push-to-Talk'" + }, + "customAreaLabel": { + "message": "Bereich zum Aufnehmen festlegen", + "description": "Label für den Schalter 'Benutzerdefinierte Bereichsaufnahme'" + }, + "flipCameraLabel": { + "message": "Kamera umdrehen", + "description": "Label für den Schalter 'Kamera umdrehen'" + }, + "backgroundEffectsLabel": { + "message": "Hintergrundeffekte", + "description": "Label für den Schalter 'Hintergrundeffekte'" + }, + "recordButtonLabel": { + "message": "Aufnahme starten", + "description": "Label für die Schaltfläche 'Aufnahme starten'" + }, + "recordButtonInProgressLabel": { + "message": "Starte Aufnahme...", + "description": "Label für die Schaltfläche 'Aufnahme starten' im Fortschritt" + }, + "recordButtonNoCameraLabel": { + "message": "Kamera auswählen, um aufzunehmen", + "description": "Label für die Schaltfläche 'Aufnahme starten' im Kameramodus, wenn keine Kamera ausgewählt ist" + }, + "showMoreOptionsLabel": { + "message": "Weitere Optionen anzeigen", + "description": "Label für die Schaltfläche 'Weitere Optionen anzeigen'" + }, + "systemAudioLabel": { + "message": "Systemaudio einschließen", + "description": "Tab/Systemaudio-Beschriftung" + }, + "hideToolbarLabel": { + "message": "Symbolleiste ausblenden", + "description": "Beschreibung für das Ausblenden der Symbolleiste" + }, + "countdownLabel": { + "message": "Countdown", + "description": "Beschreibung für das Countdown-Label" + }, + "alarmLabel": { + "message": "Zeitlimit setzen", + "description": "Beschreibung für das Alarm-Label" + }, + "blurTypeLabel": { + "message": "Unschärfe", + "description": "Beschreibung für das Unschärfe-Hintergrund-Label" + }, + "noneDropdownLabel": { + "message": "Kein", + "description": "Beschreibung für die Auswahl 'Kein Gerät ausgewählt'" + }, + "noCameraDropdownLabel": { + "message": "Keine Kamera", + "description": "Beschreibung für die Auswahl 'Keine Kamera ausgewählt'" + }, + "noMicrophoneDropdownLabel": { + "message": "Kein Mikrofon", + "description": "Beschreibung für die Auswahl 'Kein Mikrofon ausgewählt'" + }, + "selectSourceDropdownPlaceholder": { + "message": "Quelle auswählen", + "description": "Platzhalter für die Auswahl der Quelle" + }, + "offLabel": { + "message": "Aus", + "description": "Beschreibung für 'Aus' in der Dropdown-Liste" + }, + "regionWidthLabel": { + "message": "Breite", + "description": "Beschreibung für das Breiten-Label" + }, + "regionHeightLabel": { + "message": "Höhe", + "description": "Beschreibung für das Höhen-Label" + }, + "addImageToastTitle": { + "message": "Klicken Sie, um ein Bild einzufügen", + "description": "Toast-Nachricht, die angezeigt wird, wenn ein neues Bild hinzugefügt wird" + }, + "finishRecordingTooltip": { + "message": "Aufnahme beenden", + "description": "Tooltip für das Beenden der Aufnahme" + }, + "restartRecordingTooltip": { + "message": "Aufnahme neu starten", + "description": "Tooltip für das Neustarten der Aufnahme" + }, + "pauseRecordingTooltip": { + "message": "Aufnahme pausieren", + "description": "Tooltip für das Pausieren der Aufnahme" + }, + "resumeRecordingTooltip": { + "message": "Aufnahme fortsetzen", + "description": "Tooltip für das Fortsetzen der Aufnahme" + }, + "cancelRecordingTooltip": { + "message": "Aufnahme abbrechen", + "description": "Tooltip für das Abbrechen der Aufnahme" + }, + "toggleDrawingToolsTooltip": { + "message": "Zeichenwerkzeuge ein-/ausschalten", + "description": "Tooltip für das Ein- und Ausschalten der Zeichenwerkzeuge" + }, + "toggleBlurToolTooltip": { + "message": "Unschärfe-Werkzeug ein-/ausschalten", + "description": "Tooltip für das Ein- und Ausschalten des Unschärfe-Werkzeugs" + }, + "toggleCursorOptionsTooltip": { + "message": "Cursor-Optionen ein-/ausschalten", + "description": "Tooltip für das Ein- und Ausschalten der Cursor-Optionen" + }, + "disableCameraTooltip": { + "message": "Kamera deaktivieren", + "description": "Tooltip für das Deaktivieren der Kamera" + }, + "enableCameraTooltip": { + "message": "Kamera aktivieren", + "description": "Tooltip für das Aktivieren der Kamera" + }, + "noCameraPermissionsTooltip": { + "message": "Keine Kameraberechtigungen", + "description": "Tooltip für fehlende Kameraberechtigungen" + }, + "disableMicrophoneTooltip": { + "message": "Mikrofon deaktivieren", + "description": "Tooltip für das Deaktivieren des Mikrofons" + }, + "enableMicrophoneTooltip": { + "message": "Mikrofon aktivieren", + "description": "Tooltip für das Aktivieren des Mikrofons" + }, + "noMicrophonePermissionsTooltip": { + "message": "Keine Mikrofonberechtigungen", + "description": "Tooltip für fehlende Mikrofonberechtigungen" + }, + "selectToolTooltip": { + "message": "Werkzeug auswählen", + "description": "Tooltip für das Auswählen des Werkzeugs" + }, + "penToolTooltip": { + "message": "Stift-Werkzeug", + "description": "Tooltip für das Stift-Werkzeug" + }, + "highlighterToolTooltip": { + "message": "Textmarker-Werkzeug", + "description": "Tooltip für das Textmarker-Werkzeug" + }, + "eraserToolTooltip": { + "message": "Radiergummi-Werkzeug", + "description": "Tooltip für das Radiergummi-Werkzeug" + }, + "textToolTooltip": { + "message": "Text-Werkzeug", + "description": "Tooltip für das Text-Werkzeug" + }, + "shapeToolTooltip": { + "message": "Form-Werkzeug", + "description": "Tooltip für das Form-Werkzeug" + }, + "arrowToolTooltip": { + "message": "Pfeil-Werkzeug", + "description": "Tooltip für das Pfeil-Werkzeug" + }, + "imageToolTooltip": { + "message": "Bild-Werkzeug", + "description": "Tooltip für das Bild-Werkzeug" + }, + "undoTooltip": { + "message": "Rückgängig machen", + "description": "Tooltip für das Rückgängig machen" + }, + "redoTooltip": { + "message": "Wiederherstellen", + "description": "Tooltip für das Wiederherstellen" + }, + "clearCanvasTooltip": { + "message": "Leinwand löschen", + "description": "Tooltip für das Löschen der Leinwand" + }, + "moreColorsTooltip": { + "message": "Weitere Farben", + "description": "Tooltip für mehr Farben" + }, + "thickStrokeTooltip": { + "message": "Dicke Linie", + "description": "Tooltip für dicke Linien" + }, + "mediumStrokeTooltip": { + "message": "Mittlere Linie", + "description": "Tooltip für mittlere Linien" + }, + "thinStrokeTooltip": { + "message": "Dünne Linie", + "description": "Tooltip für dünne Linien" + }, + "togglePictureinPictureModeTooltip": { + "message": "Bild-in-Bild-Modus umschalten", + "description": "Tooltip für das Umschalten des Bild-in-Bild-Modus" + }, + "toggleFillTooltip": { + "message": "Füllung umschalten", + "description": "Tooltip für das Umschalten der Füllung" + }, + "drawingModeToast": { + "message": "Zeichenmodus", + "description": "Toast für Zeichenmodus" + }, + "blurModeToast": { + "message": "Unschärfe-Modus", + "description": "Toast für Unschärfe-Modus" + }, + "clearBlurredElementsTooltip": { + "message": "Alle unscharfen Elemente löschen", + "description": "Tooltip zum Löschen aller unscharfen Elemente" + }, + "highlightClicksTooltip": { + "message": "Klicks hervorheben", + "description": "Tooltip zum Hervorheben von Klicks" + }, + "highlightCursorTooltip": { + "message": "Cursor hervorheben", + "description": "Tooltip zum Hervorheben des Cursors" + }, + "spotlightCursorTooltip": { + "message": "Cursor im Spotlight", + "description": "Tooltip für den Cursor im Spotlight" + }, + "permissionsModalNoShowAgain": { + "message": "Nicht mehr anzeigen", + "description": "Schaltfläche zum Ausblenden des Berechtigungsmodals" + }, + "restartModalTitle": { + "message": "Möchten Sie die Aufnahme wirklich neu starten?", + "description": "Titel des Modals zum Neustart der Aufnahme" + }, + "restartModalDescription": { + "message": "Ihr aktueller Fortschritt im Video geht verloren.", + "description": "Beschreibung des Modals zum Neustart der Aufnahme" + }, + "restartModalRestart": { + "message": "Aufnahme neu starten", + "description": "Schaltfläche zum Neustart der Aufnahme im Modal" + }, + "restartModalResume": { + "message": "Aufnahme fortsetzen", + "description": "Schaltfläche zum Fortsetzen der Aufnahme im Modal" + }, + "discardModalTitle": { + "message": "Möchten Sie die Aufnahme wirklich verwerfen?", + "description": "Titel des Modals zum Verwerfen der Aufnahme" + }, + "discardModalDescription": { + "message": "Ihr aktueller Fortschritt im Video geht verloren.", + "description": "Beschreibung des Modals zum Verwerfen der Aufnahme" + }, + "discardModalDiscard": { + "message": "Aufnahme verwerfen", + "description": "Schaltfläche zum Verwerfen der Aufnahme im Modal" + }, + "discardModalResume": { + "message": "Aufnahme fortsetzen", + "description": "Schaltfläche zum Fortsetzen der Aufnahme im Modal" + }, + "recorderSelectTitle": { + "message": "Wählen Sie, was Sie aufnehmen möchten", + "description": "Titel auf der Aufnahmeseite" + }, + "recorderSelectProgressTitle": { + "message": "Aufnahme...", + "description": "Titel auf der Aufnahmeseite während der Aufnahme" + }, + "recorderSelectDescription": { + "message": "Halten Sie diesen Tab geöffnet. Er wird sich schließen, sobald Ihre Aufnahme gespeichert wurde.", + "description": "Beschreibung auf der Aufnahmeseite" + }, + "sandboxProgressTitle": { + "message": "Vorbereitung der Aufnahme...", + "description": "Titel auf der Sandbox-Seite während der Aufnahme / Speicherung" + }, + "sandboxProgressDescription": { + "message": "Halten Sie diesen Tab geöffnet. Er wird sich aktualisieren, wenn Ihre Aufnahme fertig ist.", + "description": "Beschreibung auf der Sandbox-Seite während der Aufnahme / Speicherung" + }, + "sandboxEditorMainTitle": { + "message": "Editor", + "description": "Titel in der Navigation der Sandbox-Editor-Seite" + }, + "sandboxEditorCancelButton": { + "message": "Abbrechen", + "description": "Abbrechen-Schaltfläche auf der Sandbox-Editor-Seite" + }, + "sandboxEditorRevertButton": { + "message": "Auf Original zurücksetzen", + "description": "Schaltfläche zum Zurücksetzen auf das Original auf der Sandbox-Editor-Seite" + }, + "sandboxEditorResetButton": { + "message": "Zurücksetzen", + "description": "Schaltfläche zum Zurücksetzen auf der Sandbox-Editor-Seite" + }, + "sandboxEditorSaveButton": { + "message": "Änderungen speichern", + "description": "Schaltfläche zum Speichern auf der Sandbox-Editor-Seite" + }, + "sandboxEditorSaveProgressButton": { + "message": "Speichern...", + "description": "Schaltfläche zum Speichern auf der Sandbox-Editor-Seite während des Speicherns" + }, + "sandboxAudioDragAndDrop": { + "message": "Ziehen Sie Ihre Audio-Datei hierhin", + "description": "Audio-Datei per Drag & Drop auf der Sandbox-Editor-Seite" + }, + "sandboxAudioOrBrowse": { + "message": "Oder klicken Sie hier, um zu durchsuchen", + "description": "Oder klicken Sie hier, um die Audio-Datei auf der Sandbox-Editor-Seite zu durchsuchen" + }, + "sandboxAudioSettingsTitle": { + "message": "Einstellungen", + "description": "Titel der Audio-Einstellungen auf der Sandbox-Editor-Seite" + }, + "sandboxAudioVolumeLabel": { + "message": "Lautstärke", + "description": "Beschriftung für die Lautstärke-Einstellungen auf der Sandbox-Editor-Seite" + }, + "sandboxAudioUpdateButton": { + "message": "Aktualisieren", + "description": "Schaltfläche zum Aktualisieren der Audio-Einstellungen auf der Sandbox-Editor-Seite" + }, + "sandboxCropTitle": { + "message": "Zuschneiden", + "description": "Titel auf der Sandbox-Editor-Seite zum Zuschneiden" + }, + "widthLabel": { + "message": "Breite", + "description": "Beschriftung für die Breiten-Einstellung" + }, + "heightLabel": { + "message": "Höhe", + "description": "Beschriftung für die Höhen-Einstellung" + }, + "leftLabel": { + "message": "Links", + "description": "Beschriftung für die Links-Einstellung" + }, + "topLabel": { + "message": "Oben", + "description": "Beschriftung für die Oben-Einstellung" + }, + "sandboxEditorTrimInfo": { + "message": "Ziehen Sie die Griffe und verwenden Sie die Schaltflächen auf der linken Seite, um den ausgewählten Abschnitt zu bearbeiten.", + "description": "Informationen zum Zuschneiden im Sandbox-Editor" + }, + "sandboxEditorTrimButton": { + "message": "Video zuschneiden", + "description": "Zuschneide-Schaltfläche im Sandbox-Editor" + }, + "sandboxEditorTrimProgressButton": { + "message": "Zuschneiden...", + "description": "Zuschneide-Schaltfläche im Sandbox-Editor während des Zuschneidens" + }, + "sandboxEditorCutButton": { + "message": "Abschnitt schneiden", + "description": "Schneide-Schaltfläche im Sandbox-Editor" + }, + "sandboxEditorCutProgressButton": { + "message": "Schneiden...", + "description": "Schneide-Schaltfläche im Sandbox-Editor während des Schneidens" + }, + "sandboxEditorMuteButton": { + "message": "Audio stummschalten", + "description": "Stummschaltungs-Schaltfläche im Sandbox-Editor" + }, + "sandboxEditorMuteProgressButton": { + "message": "Stummschalten...", + "description": "Stummschaltungs-Schaltfläche im Sandbox-Editor während des Stummschaltens" + }, + "learnMoreDot": { + "message": "Erfahren Sie mehr.", + "description": "Weitere Informationen mit einem Punkt" + }, + "undoLabel": { + "message": "Rückgängig", + "description": "Rückgängig-Schriftzug" + }, + "redoLabel": { + "message": "Wiederholen", + "description": "Wiederholen-Schriftzug" + }, + "leaveReview": { + "message": "Bewertung hinterlassen", + "description": "Schaltfläche 'Bewertung abgeben'" + }, + "followForUpdates": { + "message": "Folgen Sie für Aktualisierungen", + "description": "Schaltfläche 'Folgen für Aktualisierungen'" + }, + "offlineLabelTitle": { + "message": "Sie sind derzeit offline", + "description": "Offline-Schriftzug" + }, + "offlineLabelDescription": { + "message": "Einige Funktionen sind nicht verfügbar, bis eine Verbindung wiederhergestellt ist", + "description": "Beschreibung des Offline-Schriftzugs" + }, + "offlineLabelTryAgain": { + "message": "Erneut versuchen", + "description": "Schaltfläche 'Erneut versuchen' des Offline-Schriftzugs" + }, + "updateChromeLabelTitle": { + "message": "Chrome muss aktualisiert werden", + "description": "Aktualisieren Sie den Chrome-Schriftzug" + }, + "updateChromeLabelDescription": { + "message": "Aktualisieren Sie, um auf mehr Funktionen zugreifen zu können", + "description": "Beschreibung des Aktualisieren Sie den Chrome-Schriftzugs" + }, + "learnMoreLabel": { + "message": "Erfahren Sie mehr", + "description": "Schaltfläche 'Erfahren Sie mehr'" + }, + "overLimitLabelTitle": { + "message": "Video zu lang für lokale Verarbeitung", + "description": "Kennzeichnung für über 5 Minuten in der Bearbeitung" + }, + "overLimitLabelDescription": { + "message": "Bearbeitung und MP4-Export nicht verfügbar", + "description": "Beschreibung für über 5 Minuten in der Bearbeitung" + }, + "videoProcessingLabelTitle": { + "message": "Das Video wird verarbeitet...", + "description": "Schriftzug 'Videoverarbeitung' im Editor" + }, + "videoProcessingLabelDescription": { + "message": "Aktualisieren Sie für schnellere Bearbeitung", + "description": "Beschreibung der Videoverarbeitung im Editor" + }, + "sandboxEditTitle": { + "message": "Bearbeiten", + "description": "Bearbeitungstitel auf der Sandbox-Editor-Seite" + }, + "noConnectionLabel": { + "message": "Keine Verbindung", + "description": "Schriftzug 'Keine Verbindung'" + }, + "notAvailableLabel": { + "message": "Nicht verfügbar", + "description": "Schriftzug 'Nicht verfügbar'" + }, + "editButtonTitle": { + "message": "Video bearbeiten", + "description": "Schriftzug 'Zuschneiden'-Schaltfläche" + }, + "editButtonDescription": { + "message": "Video zuschneiden, schneiden oder stummschalten", + "description": "Beschriftung 'Zuschneiden'" + }, + "preparingLabel": { + "message": "Video wird vorbereitet, bitte warten...", + "description": "Beschriftung 'Vorbereitung'" + }, + "cropButtonTitle": { + "message": "Zuschneiden", + "description": "Beschriftung 'Zuschneiden'-Schaltfläche" + }, + "cropButtonDescription": { + "message": "Video zuschneiden und neu dimensionieren", + "description": "Beschriftung 'Zuschneiden'" + }, + "addAudioButtonTitle": { + "message": "Audio hinzufügen", + "description": "Beschriftung 'Audio hinzufügen'-Schaltfläche" + }, + "addAudioButtonDescription": { + "message": "Laden Sie Ihr eigenes Audio hoch, um es zum Video hinzuzufügen", + "description": "Beschriftung 'Audio hinzufügen'" + }, + "sandboxSaveTitle": { + "message": "Speichern", + "description": "Titel 'Speichern' auf der Sandbox-Editor-Seite" + }, + "signOutDriveLabel": { + "message": "Aus Drive abmelden", + "description": "Beschriftung 'Aus Google Drive abmelden'" + }, + "savingDriveLabel": { + "message": "Wird gespeichert...", + "description": "Beschriftung 'Speichern in Google Drive'" + }, + "saveDriveButtonTitle": { + "message": "In Drive speichern", + "description": "Beschriftung 'In Google Drive speichern'-Schaltfläche" + }, + "saveDriveButtonDescription": { + "message": "Speichern Sie die aktuelle Version in Google Drive", + "description": "Beschriftung 'In Google Drive speichern'" + }, + "signInDriveLabel": { + "message": "Anmelden und in Drive speichern", + "description": "Beschriftung 'In Google Drive anmelden'" + }, + "sandboxExportTitle": { + "message": "Exportieren", + "description": "Titel 'Exportieren' auf der Sandbox-Editor-Seite" + }, + "downloadingLabel": { + "message": "Wird heruntergeladen...", + "description": "Beschriftung 'Herunterladen'" + }, + "downloadWEBMButtonTitle": { + "message": "Als .webm herunterladen", + "description": "Beschriftung 'WEBM herunterladen'-Schaltfläche" + }, + "downloadWEBMButtonDescription": { + "message": ".webm-Video exportieren", + "description": "Beschriftung 'WEBM herunterladen'" + }, + "downloadMP4ButtonTitle": { + "message": "Als .mp4 herunterladen", + "description": "Beschriftung 'MP4 herunterladen'-Schaltfläche" + }, + "downloadMP4ButtonDescription": { + "message": ".mp4-Video exportieren (empfohlen)", + "description": "Beschriftung 'MP4 herunterladen'" + }, + "downloadGIFButtonTitle": { + "message": "Als .gif herunterladen", + "description": "Beschriftung 'GIF herunterladen'-Schaltfläche" + }, + "downloadGIFButtonDescription": { + "message": "GIF exportieren (max. 30 Sekunden)", + "description": "Beschriftung 'GIF herunterladen'" + }, + "shareModalSandboxTitle": { + "message": "Teilen Sie Ihre Videos mit anderen", + "description": "Titel des Freigabemodals auf der Sandbox-Editor-Seite" + }, + "shareModalSandboxDescription": { + "message": "Kommt bald! Hinterlassen Sie Ihre E-Mail-Adresse, um auf dem Laufenden zu bleiben und benachrichtigt zu werden, wenn die Freigabe verfügbar ist.", + "description": "Beschreibung des Freigabemodals auf der Sandbox-Editor-Seite" + }, + "shareModalSandboxButton": { + "message": "Warteliste beitreten", + "description": "Platzhalter für E-Mail im Freigabemodal auf der Sandbox-Editor-Seite" + }, + "shareSandboxButton": { + "message": "Video teilen", + "description": "Schaltfläche 'Video teilen' auf der Sandbox-Editor-Seite" + }, + "replaceAudioEditor": { + "message": "Bestehendes Audio ersetzen", + "description": "Beschriftung 'Audio ersetzen'-Schaltfläche im Editor" + }, + "zoomToPointPopup": { + "message": "Zum Cursor zoomen", + "description": "Pop-up 'Zum Punkt zoomen'" + }, + "stayInPagePopup": { + "message": "In der Seite bleiben während der Aufnahme", + "description": "Pop-up 'In Seite bleiben'" + }, + "micReminderPopup": { + "message": "Warnung: Mikrofon ist ausgeschaltet", + "description": "Pop-up 'Mikrofon-Erinnerung'" + }, + "helpPopup": { + "message": "Hilfe", + "description": "Schaltfläche 'Hilfe' im Pop-up" + }, + "pausedRecordingToast": { + "message": "Aufnahme pausiert. Drücken Sie die Wiedergabetaste, um fortzusetzen.", + "description": "Titel des Pop-ups 'Aufnahme pausiert'" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport hat keine Berechtigung zur Bildschirmaufnahme", + "description": "Titel des Berechtigungspop-ups" + }, + "chromePermissionsModalDescription": { + "message": "Um die Bildschirmaufnahme zu aktivieren, müssen Sie MyTechPassport die Berechtigung zum Erfassen Ihres Bildschirms erteilen, wenn Sie dazu aufgefordert werden.", + "description": "Beschreibung des Berechtigungspop-ups" + }, + "chromePermissionsModalAction": { + "message": "Bildschirmaufnahme aktivieren", + "description": "Aktion des Berechtigungspop-ups" + }, + "chromePermissionsModalCancel": { + "message": "Abbrechen", + "description": "Abbrechen des Berechtigungspop-ups" + }, + "micMutedModalTitle": { + "message": "Ihr Mikrofon ist stummgeschaltet", + "description": "Titel des Pop-ups 'Mikrofon stummgeschaltet'" + }, + "micMutedModalDescription": { + "message": "Um Audio in Ihrer Aufnahme einzuschließen, müssen Sie Ihr Mikrofon wieder aktivieren. Möchten Sie ohne Audio fortfahren?", + "description": "Beschreibung des Pop-ups 'Mikrofon stummgeschaltet'" + }, + "micMutedModalAction": { + "message": "Ja, fortfahren", + "description": "Fortsetzen der Mikrofon-Stummschaltungsmodalität" + }, + "micMutedModalCancel": { + "message": "Abbrechen", + "description": "Abbrechen der Mikrofon-Stummschaltungsmodalität" + }, + "setupTitle": { + "message": "So starten Sie mit MyTechPassport in drei einfachen Schritten:", + "description": "Titel der Einrichtungsschritte" + }, + "setupStep1Before": { + "message": "1- Klicken Sie auf das ", + "description": "Einrichtungsschritt 1, vor dem Symbol. Es benötigt ein Leerzeichen am Ende." + }, + "setupStep1After": { + "message": " Symbol der Erweiterungen", + "description": "Einrichtungsschritt 1, nach dem Symbol. Es benötigt ein Leerzeichen am Anfang." + }, + "setupStep2Before": { + "message": "2- Drücken Sie das ", + "description": "Einrichtungsschritt 2, vor dem Symbol. Es benötigt ein Leerzeichen am Ende." + }, + "setupStep2After": { + "message": " Symbol für das Anheften", + "description": "Einrichtungsschritt 2, nach dem Symbol. Es benötigt ein Leerzeichen am Anfang." + }, + "setupStep3Before": { + "message": "3- Klicken Sie auf das ", + "description": "Einrichtungsschritt 3, vor dem Symbol. Es benötigt ein Leerzeichen am Ende." + }, + "setupStep3After": { + "message": " MyTechPassport-Symbol, um zu starten", + "description": "Einrichtungsschritt 3, nach dem Symbol. Es benötigt ein Leerzeichen am Anfang." + }, + "setupCompleteTitle": { + "message": "Fantastisch! Sie sind bereit", + "description": "Titel der Einrichtung abgeschlossen" + }, + "setupCompleteDescription": { + "message": "Sie können jetzt hier oder in einem anderen Tab mit der Aufnahme beginnen.", + "description": "Beschreibung der Einrichtung abgeschlossen" + }, + "clickHereDrawOnboarding": { + "message": "Hier klicken, um zu zeichnen", + "description": "Onboarding 'Hier klicken'" + }, + "countdownMessage": { + "message": "Entspannen Sie sich. Klicken Sie überall hin, um den Countdown zu stoppen.", + "description": "Meldung 'Countdown'" + }, + "sandboxEditorTooSmallInfo": { + "message": "Bearbeitungen können aufgrund der Intervalle zwischen den Frames für kurze Zeiträume ungenau sein.", + "description": "Informationen darüber, dass der Editor zu klein ist" + }, + "processingBannerEditor": { + "message": "Das Video wird verarbeitet, die Wiedergabe kann ungenau oder unterbrochen sein.", + "description": "Verarbeitungsbanner im Editor" + }, + "croppingInfoTitle": { + "message": "Das Zuschneiden kann eine Weile dauern", + "description": "Titel der Informationen zum Zuschneiden" + }, + "croppingInfoDescription": { + "message": "Upgrade für eine schnellere Verarbeitung", + "description": "Beschreibung der Informationen zum Zuschneiden" + }, + "micOnToast": { + "message": "Mikrofon aktiviert", + "description": "Toast-Titel 'Mikrofon aktiviert'" + }, + "micOffToast": { + "message": "Mikrofon deaktiviert", + "description": "Toast-Titel 'Mikrofon deaktiviert'" + }, + "hideUIAlerts": { + "message": "UI-Benachrichtigungen ausblenden", + "description": "Schaltfläche 'UI-Benachrichtigungen ausblenden'" + }, + "noShowAgain": { + "message": "Nicht erneut anzeigen", + "description": "Schaltfläche 'Nicht erneut anzeigen'" + }, + "toolbarHoverOnly": { + "message": "Symbolleiste nur bei Bedarf anzeigen", + "description": "Schaltfläche 'Symbolleiste nur bei Bedarf anzeigen'" + }, + "stopRecording": { + "message": "Aufnahme beenden", + "description": "Schaltfläche 'Aufnahme beenden' im Aufnahmescreen" + }, + "updateAnnouncementTitle": { + "message": "Willkommen beim neuen MyTechPassport!", + "description": "Titel der Update-Ankündigung für bestehende Benutzer" + }, + "updateAnnouncementDescription": { + "message": "Wir stellen ein neues Erscheinungsbild und viele spannende Funktionen vor, aber keine Sorge, es handelt sich immer noch um die gleiche kostenlose, private und Open-Source-Erweiterung, die Sie kennen und lieben.", + "description": "Beschreibung der Update-Ankündigung für bestehende Benutzer" + }, + "updateAnnouncementLearnMore": { + "message": "Erfahren Sie mehr über das Update.", + "description": "Link zur Update-Ankündigung für bestehende Benutzer" + }, + "updateAnnouncementButton": { + "message": "Los geht's", + "description": "Schaltfläche 'Los geht's' für bestehende Benutzer in der Update-Ankündigung" + }, + "streamErrorModalTitle": { + "message": "Fehler beim Starten der Aufnahme", + "description": "Titel des Stream-Fehlermodals" + }, + "streamErrorModalDescription": { + "message": "Es sieht so aus, als ob beim Starten der Aufnahme ein Fehler aufgetreten ist. Starten Sie Ihren Browser neu und versuchen Sie es erneut. Wenn das Problem weiterhin besteht, kontaktieren Sie uns bitte unter support@MyTechPassport.io.", + "description": "Beschreibung des Stream-Fehlermodals" + }, + "highestQuality": { + "message": "Höchste Qualität", + "description": "Beschriftung für den Wechsel zur höchsten Qualität im Popup-Fenster" + }, + "restoreRecording": { + "message": "Letzte Aufnahme wiederherstellen", + "description": "Schaltfläche zum Wiederherstellen der letzten Aufnahme im Popup-Fenster" + }, + "havingIssuesButton": { + "message": "Haben Sie Probleme?", + "description": "Schaltfläche 'Probleme' im Editor" + }, + "havingIssuesModalTitle": { + "message": "Können Sie Ihre Aufnahme nicht sehen?", + "description": "Titel des Modalfensters 'Probleme' im Editor" + }, + "havingIssuesModalDescription": { + "message": "Wenn Sie Ihre Aufnahme abgeschlossen haben und sich auf dieser Seite befinden, ohne Ihr Video zu sehen, können Sie versuchen, die Rohvideodaten herunterzuladen, sofern verfügbar. Sie können auch Kontakt aufnehmen und einen Fehlerbericht senden.", + "description": "Beschreibung des Modalfensters 'Probleme' im Editor" + }, + "havingIssuesModalButton": { + "message": "Rohvideodaten herunterladen", + "description": "Schaltfläche im Modalfenster 'Probleme' im Editor" + }, + "havingIssuesModalButton2": { + "message": "Fehler melden", + "description": "Zweite Schaltfläche im Modalfenster 'Probleme' im Editor" + }, + "noRecordingFound": { + "message": "Keine Aufzeichnung gefunden, tut uns leid :(", + "description": "Meldung 'Keine Aufzeichnung gefunden' im Editor" + }, + "memoryLimitTitle": { + "message": "Speichergrenze erreicht", + "description": "Titel für erreichte Speichergrenze" + }, + "memoryLimitDescription": { + "message": "Ihr Gerät hat seinen verfügbaren Speicherplatz für die Aufnahme erschöpft, wodurch die Aufnahme automatisch gestoppt wurde. Wenn Sie länger aufnehmen möchten, können Sie versuchen, die Qualität des Videos zu reduzieren oder Speicherplatz auf Ihrem Gerät freizugeben.", + "description": "Beschreibung für erreichte Speichergrenze" + }, + "understoodButton": { + "message": "Verstanden", + "description": "Verstanden-Button" + }, + "notEnoughSpaceTitle": { + "message": "Nicht genügend Speicherplatz", + "description": "Titel für nicht genügend Speicherplatz" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassportsport benötigt mindestens 1 GB freien Speicherplatz für die Aufnahme. Bitte schaffen Sie Speicherplatz frei und versuchen Sie es erneut.", + "description": "Beschreibung für nicht genügend Speicherplatz" + }, + "clearSpaceButton": { + "message": "Vorherige Aufnahmen löschen", + "description": "Button zum Löschen vorheriger Aufnahmen" + }, + "sandboxAdvancedTitle": { + "message": "Erweitert", + "description": "Erweiterte Sektion auf der Sandbox-Editor-Seite" + }, + "rawRecordingButtonTitle": { + "message": "Rohvideo herunterladen", + "description": "Schaltfläche zum Herunterladen des Rohvideos" + }, + "rawRecordingButtonDescription": { + "message": "Exportieren Sie die originalen Aufnahmedaten", + "description": "Beschriftung der Schaltfläche zum Herunterladen des Rohvideos" + }, + "troubleshootButtonTitle": { + "message": "Hilfe bei Ihrer Aufnahme erhalten", + "description": "Schaltfläche zur Problembehandlung" + }, + "troubleShootButtonDescription": { + "message": "Stellen Sie Ihr Video wieder her und lösen Sie andere Probleme", + "description": "Beschriftung zur Problembehandlung" + }, + "rawRecordingModalTitle": { + "message": "Rohvideo herunterladen", + "description": "Titel des Modals für das Rohvideo" + }, + "rawRecordingModalDescription": { + "message": "Das Rohvideo ist das Originalvideo, das von MyTechPassport aufgenommen wurde. Dieses Video wurde nicht bearbeitet oder verändert und kann daher sehr groß sein und auf allen Geräten möglicherweise nicht abspielbar sein. Wenn Sie Probleme mit dem bearbeiteten Video haben, können Sie diese Datei verwenden, um Ihr Video wiederherzustellen.", + "description": "Beschreibung des Modals für das Rohvideo" + }, + "rawRecordingModalButton": { + "message": "Herunterladen", + "description": "Schaltfläche des Modals für das Rohvideo" + }, + "troubleshootModalTitle": { + "message": "Systeminformationen und Videodaten herunterladen und zur Fehlerbehebung senden", + "description": "Titel des Modals zur Problembehandlung" + }, + "troubleshootModalDescription": { + "message": "Nach dem Herunterladen senden Sie die Datei an support@MyTechPassport.io mit allen relevanten Informationen. Wir verwenden diese Daten, um Ihnen bei der Fehlerbehebung von Problemen mit der Erweiterung zu helfen und Ihr Video gegebenenfalls wiederherzustellen.", + "description": "Beschreibung des Modals zur Problembehandlung" + }, + "troubleshootModalButton": { + "message": "Herunterladen", + "description": "Schaltfläche des Modals zur Problembehandlung" + }, + "overLimitModalTitle": { + "message": "Das Video ist zu lang, um auf Ihrem Gerät verarbeitet zu werden", + "description": "Titel des Modals für die 5-Minuten-Limitierung" + }, + "overLimitModalDescription": { + "message": "Da MyTechPassport komplett privat ist und lokal ausgeführt wird, ist es von der Hardware Ihres Geräts begrenzt. Die Verarbeitung eines Videos dieser Länge würde zu lange dauern und sehr ressourcenintensiv sein. Keine Sorge, Sie können immer noch die WEBM-Datei oder die Rohaufnahme herunterladen, aber Bearbeitung und MP4-Export sind nicht verfügbar. Sie können das Video dennoch versuchen zu verarbeiten, wenn Sie die Risiken verstehen.", + "description": "Beschreibung des Modals für die 5-Minuten-Limitierung" + }, + "overLimitModalButton": { + "message": "Ich verstehe das Risiko, trotzdem versuchen", + "description": "Schaltfläche des Modals für die 5-Minuten-Limitierung" + }, + "overLimitModalLearnMore": { + "message": "Mehr über die Verarbeitung langer Videos erfahren.", + "description": "Link 'Erfahren Sie mehr' im Modal für die 5-Minuten-Limitierung mit einem Punkt" + }, + + "recoveryModeTitle": { + "message": "Wiederherstellungsmodus", + "description": "Titel des Wiederherstellungsmodus" + }, + + "downloadForTroubleshootingOption": { + "message": "Daten zum Beheben von Problemen herunterladen", + "description": "Option zum Herunterladen zur Fehlerbehebung" + }, + "getHelpNav": { + "message": "Hilfe-Center", + "description": "Hilfe-Navigationspunkt" + }, + "audioWarningTitle": { + "message": "Computer-Audio aufzeichnen", + "description": "Titel der Audio-Warnung" + }, + "audioWarningDescription": { + "message": "Um Audio von dieser Seite aufzuzeichnen, müssen Sie zu „$tab$“ wechseln.", + "description": "Beschreibung der Audio-Warnung", + "placeholders": { + "tab": { + "content": "$1", + "example": "Tab-Bereich" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Erweiterung auf Tab nicht unterstützt", + "description": "Titel der Erweiterung nicht auf Tab unterstützt" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport wurde in Ihrem vorherigen Tab nicht unterstützt. Sie können Ihre Aufnahme hier dennoch starten und dann zum Tab wechseln, aber Ihre Kamera und Symbolleiste werden nicht sichtbar sein.", + "description": "Beschreibung der Erweiterung nicht auf Tab unterstützt" + }, + "backupsTitle": { + "message": "Lokales Backup für Ihre MyTechPassport-Aufnahmen einrichten", + "description": "Titel des Backups" + }, + "backupsDescription1": { + "message": "Bewahren Sie eine Kopie aller Ihrer Aufnahmen auf. Wenn Sie keine Backups einrichten, werden Ihre Aufnahmen nur gespeichert, wenn Sie sich entscheiden, sie herunterzuladen.", + "description": "Beschreibung des Backups" + }, + "backupsDescription2": { + "message": "Es könnte erforderlich sein, zuerst einen neuen Ordner zu erstellen, wenn Sie versuchen, in Downloads oder andere Systemordner zu speichern.", + "description": "Beschreibung des Backups" + }, + "backupsSelectFolder": { + "message": "Ordner auswählen", + "description": "Schaltfläche „Ordner auswählen“" + }, + "backupsNotNow": { + "message": "Jetzt nicht", + "description": "Schaltfläche „Jetzt nicht“" + }, + "backupsOnTitle": { + "message": "Ihre Aufnahmen werden lokal gesichert", + "description": "Titel der aktiven Backups" + }, + "backupsOnDescription": { + "message": "Um zu verhindern, dass Sie jedes Mal um Berechtigungen gebeten werden, wenn Sie aufzeichnen, empfehlen wir Ihnen, diesen Tab geöffnet zu lassen.", + "description": "Beschreibung der aktiven Backups" + }, + "backupsClose": { + "message": "Tab dennoch schließen", + "description": "Schaltfläche „Tab dennoch schließen“" + }, + "backupsStop": { + "message": "Sicherung aller Aufnahmen beenden", + "description": "Schaltfläche „Backups beenden“" + }, + "backupsConfirmTitle": { + "message": "Bitte bestätigen Sie erneut den Zugriff auf Ihren lokalen MyTechPassport-Backup-Ordner", + "description": "Titel der Backup-Bestätigung" + }, + "backupsConfirmDescription": { + "message": "Es tut uns leid, aber wir benötigen noch einmal Ihre Zustimmung, um Ihre Aufnahmen weiterhin lokal zu sichern. Leider müssen wir jedes Mal fragen, wenn Sie diesen Tab schließen, was passieren kann, wenn Sie den Browser schließen oder Ihren Computer neu starten.", + "description": "Beschreibung der Backup-Bestätigung" + }, + "backupsConfirmAllow": { + "message": "Erlauben Sie MyTechPassport, Aufnahmen weiterhin zu sichern", + "description": "Schaltfläche „Erlauben“ in der Backup-Bestätigung" + }, + "backupsToggle": { + "message": "Aufnahmen sichern", + "description": "Beschriftung für die Backup-Option" + }, + "backupPermissionFailTitle": { + "message": "Berechtigung zur Sicherung der Aufnahme nicht erteilt", + "description": "Titel des Backup-Berechtigungsfehlers" + }, + "backupPermissionFailDescription": { + "message": "Sie haben keinen Ordner für die lokale Sicherung Ihrer Aufnahmen ausgewählt. Je nach Browser-Version oder Betriebssystem kann es erforderlich sein, den Ordner jedes Mal auszuwählen, wenn Sie mit der Aufzeichnung beginnen. Sie können es erneut versuchen oder Backups ganz deaktivieren, wenn Sie wiederholte Berechtigungsanfragen vermeiden möchten.", + "description": "Beschreibung des Backup-Berechtigungsfehlers" + }, + "recordAudioWarningMacTitle": { + "message": "Computer-Audio aufzeichnen", + "description": "Titel der Audio-Warnung für macOS" + }, + "recordAudioWarningMacDescription": { + "message": "Auf macOS können Sie nur den Tab-Audio aufzeichnen. Wählen Sie die Option 'Chrome-Tab' und stellen Sie sicher, dass 'Tab-Audio ebenfalls teilen' aktiviert ist.", + "description": "Beschreibung der Audio-Warnung für macOS" + }, + "recordAudioWarningOtherTitle": { + "message": "Computer-Audio aufzeichnen", + "description": "Titel der Audio-Warnung für andere Systeme" + }, + "recordAudioWarningOtherDescription": { + "message": "Stellen Sie sicher, dass Sie die Option 'System-Audio teilen' aktivieren, wenn Sie Computer-Audio aufzeichnen möchten. Wenn Sie diese Option nicht sehen, versuchen Sie, Chrome zu aktualisieren oder zur Tab-Aufzeichnung zu wechseln.", + "description": "Beschreibung der Audio-Warnung für andere Systeme" + }, + + "maxResolutionLabel": { + "message": "Maximale Auflösung", + "description": "Beschriftung für maximale Auflösung im Einstellungsmenü" + }, + "maxFPSLabel": { + "message": "Maximale FPS", + "description": "Beschriftung für maximale FPS im Einstellungsmenü" + }, + + "notEnoughRAM": { + "message": "Nicht genügend RAM", + "description": "Beschriftung 'Nicht genügend RAM' im Einstellungsmenü" + }, + "resizeWindowLabel": { + "message": "Fenstergröße ändern", + "description": "Beschriftung für die Änderung der Fenstergröße im Einstellungsmenü" + }, + "screenTooSmallTooltip": { + "message": "Der Bildschirm ist zu klein für diese Auflösung", + "description": "Tooltip, der anzeigt, dass der Bildschirm zu klein ist, im Einstellungsmenü" + }, + "maxResolutionTooltip": { + "message": "Auf diesem Gerät ist diese Auflösung nicht verfügbar", + "description": "Tooltip, der anzeigt, dass diese Auflösung auf dem Gerät nicht verfügbar ist, im Einstellungsmenü" + }, + "permissionsModalReview": { + "message": "Berechtigungen überprüfen", + "description": "Schaltfläche zur Überprüfung von Berechtigungen" + } +} diff --git a/build/_locales/en/messages.json b/build/_locales/en/messages.json new file mode 100644 index 0000000..cce9a8f --- /dev/null +++ b/build/_locales/en/messages.json @@ -0,0 +1,1036 @@ +{ + "extName": { + "message": "MyTechPassport", + "description": "Extension name" + }, + "extDesc": { + "message": "The free and privacy-friendly screen recorder with no limits. Capture, annotate, edit videos and more - all with no sign in needed.", + "description": "Extension description" + }, + "recordTab": { + "message": "Record", + "description": "Record tab label on popup" + }, + "videosTab": { + "message": "Your videos", + "description": "Videos tab label on popup" + }, + "screenType": { + "message": "Screen", + "description": "Screen recording type label on popup" + }, + "tabType": { + "message": "Tab area", + "description": "Tab area recording type label on popup" + }, + "cameraType": { + "message": "Camera", + "description": "Camera recording type label on popup" + }, + "mockupType": { + "message": "Mockup", + "description": "Mockup recording type label on popup" + }, + "customAreaRecordingDisabledTitle": { + "message": "Custom area recording disabled", + "description": "Custom area recording disabled warning on popup for Chrome version older than 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Update Chrome version to 110+", + "description": "Custom area recording disabled warning description on popup for Chrome version older than 104" + }, + "customAreaRecordingDisabledAction": { + "message": "Update", + "description": "Custom area recording disabled warning action on popup for Chrome version older than 104" + }, + "permissionsModalTitle": { + "message": "Check your permissions", + "description": "Camera / microphone permissions warning modal title" + }, + "permissionsModalDescription": { + "message": "Looks like MyTechPassport can’t access your camera or microphone. Make sure to allow access by clicking on the camera icon in the address bar.", + "description": "Camera / microphone permissions warning modal description" + }, + "permissionsModalDismiss": { + "message": "Dismiss", + "description": "Camera / microphone permissions warning modal dismiss button" + }, + "allowCameraAccessButton": { + "message": "Allow camera access", + "description": "Allow camera access button" + }, + "allowMicrophoneAccessButton": { + "message": "Allow microphone access", + "description": "Allow microphone access button" + }, + "pushToTalkLabel": { + "message": "Push to talk", + "description": "Push to talk switch label" + }, + "customAreaLabel": { + "message": "Set an area to record in", + "description": "Custom area switch label" + }, + "flipCameraLabel": { + "message": "Flip camera", + "description": "Flip camera switch label" + }, + "backgroundEffectsLabel": { + "message": "Background effects", + "description": "Background effects switch label" + }, + "recordButtonLabel": { + "message": "Start Recording", + "description": "Record button label" + }, + "recordButtonInProgressLabel": { + "message": "Starting recording...", + "description": "Record button in progress label" + }, + "recordButtonNoCameraLabel": { + "message": "Set a camera to record", + "description": "Record button label when in camera mode and no camera is selected" + }, + "showMoreOptionsLabel": { + "message": "Show more options", + "description": "Show more options label" + }, + "systemAudioLabel": { + "message": "Include system audio", + "description": "Tab/system audio label" + }, + "hideToolbarLabel": { + "message": "Hide toolbar", + "description": "Hide toolbar label" + }, + "countdownLabel": { + "message": "Countdown", + "description": "Countdown label" + }, + "alarmLabel": { + "message": "Set a time limit", + "description": "Alarm label" + }, + "blurTypeLabel": { + "message": "Blur", + "description": "Blur background label" + }, + "noneDropdownLabel": { + "message": "None", + "description": "No device selected" + }, + "noCameraDropdownLabel": { + "message": "No camera", + "description": "No camera selected" + }, + "noMicrophoneDropdownLabel": { + "message": "No microphone", + "description": "No microphone selected" + }, + "selectSourceDropdownPlaceholder": { + "message": "Select a source", + "description": "Select source placeholder" + }, + "offLabel": { + "message": "Off", + "description": "Off label on dropdown" + }, + "regionWidthLabel": { + "message": "Width", + "description": "Region width label" + }, + "regionHeightLabel": { + "message": "Height", + "description": "Region height label" + }, + "addImageToastTitle": { + "message": "Click to place image", + "description": "Toast that shows when adding a new image" + }, + "finishRecordingTooltip": { + "message": "Finish recording", + "description": "Finish recording tooltip" + }, + "restartRecordingTooltip": { + "message": "Restart recording", + "description": "Restart recording tooltip" + }, + "pauseRecordingTooltip": { + "message": "Pause recording", + "description": "Pause recording tooltip" + }, + "resumeRecordingTooltip": { + "message": "Resume recording", + "description": "Resume recording tooltip" + }, + "cancelRecordingTooltip": { + "message": "Cancel recording", + "description": "Cancel recording tooltip" + }, + "toggleDrawingToolsTooltip": { + "message": "Toggle drawing tools", + "description": "Toggle drawing tools tooltip" + }, + "toggleBlurToolTooltip": { + "message": "Toggle blur tool", + "description": "Toggle blur tools tooltip" + }, + "toggleCursorOptionsTooltip": { + "message": "Toggle cursor options", + "description": "Toggle cursor options tooltip" + }, + "disableCameraTooltip": { + "message": "Disable camera", + "description": "Disable camera tooltip" + }, + "enableCameraTooltip": { + "message": "Enable camera", + "description": "Enable camera tooltip" + }, + "noCameraPermissionsTooltip": { + "message": "No camera permissions", + "description": "No camera permissions tooltip" + }, + "disableMicrophoneTooltip": { + "message": "Disable microphone", + "description": "Disable microphone tooltip" + }, + "enableMicrophoneTooltip": { + "message": "Enable microphone", + "description": "Enable microphone tooltip" + }, + "noMicrophonePermissionsTooltip": { + "message": "No microphone permissions", + "description": "No microphone permissions tooltip" + }, + "selectToolTooltip": { + "message": "Select tool", + "description": "Select tool tooltip" + }, + "penToolTooltip": { + "message": "Pen tool", + "description": "Pen tool tooltip" + }, + "highlighterToolTooltip": { + "message": "Highlighter tool", + "description": "Highlighter tool tooltip" + }, + "eraserToolTooltip": { + "message": "Eraser tool", + "description": "Eraser tool tooltip" + }, + "textToolTooltip": { + "message": "Text tool", + "description": "Text tool tooltip" + }, + "shapeToolTooltip": { + "message": "Shape tool", + "description": "Shape tool tooltip" + }, + "arrowToolTooltip": { + "message": "Arrow tool", + "description": "Arrow tool tooltip" + }, + "imageToolTooltip": { + "message": "Image tool", + "description": "Image tool tooltip" + }, + "undoTooltip": { + "message": "Undo", + "description": "Undo tooltip" + }, + "redoTooltip": { + "message": "Redo", + "description": "Redo tooltip" + }, + "clearCanvasTooltip": { + "message": "Clear canvas", + "description": "Clear canvas tooltip" + }, + "moreColorsTooltip": { + "message": "More colors", + "description": "More colors tooltip" + }, + "thickStrokeTooltip": { + "message": "Thick stroke", + "description": "Thick stroke tooltip" + }, + "mediumStrokeTooltip": { + "message": "Medium stroke", + "description": "Medium stroke tooltip" + }, + "thinStrokeTooltip": { + "message": "Thin stroke", + "description": "Thin stroke tooltip" + }, + "togglePictureinPictureModeTooltip": { + "message": "Toggle picture-in-picture mode", + "description": "Toggle picture-in-picture mode tooltip" + }, + "toggleFillTooltip": { + "message": "Toggle fill", + "description": "Toggle fill tooltip" + }, + "drawingModeToast": { + "message": "Drawing mode", + "description": "Drawing mode toast" + }, + "blurModeToast": { + "message": "Blur mode", + "description": "Blur mode toast" + }, + "clearBlurredElementsTooltip": { + "message": "Clear all blurred elements", + "description": "Clear all blurred elements tooltip" + }, + "highlightClicksTooltip": { + "message": "Highlight clicks", + "description": "Highlight clicks tooltip" + }, + "highlightCursorTooltip": { + "message": "Highlight cursor", + "description": "Highlight cursor tooltip" + }, + "spotlightCursorTooltip": { + "message": "Spotlight cursor", + "description": "Spotlight cursor tooltip" + }, + "permissionsModalNoShowAgain": { + "message": "Don't show again", + "description": "Permissions modal dismiss button" + }, + "restartModalTitle": { + "message": "Are you sure you want to restart the recording?", + "description": "Restart recording modal title" + }, + "restartModalDescription": { + "message": "Your current video progress will be lost.", + "description": "Restart recording modal description" + }, + "restartModalRestart": { + "message": "Restart recording", + "description": "Restart recording modal restart button" + }, + "restartModalResume": { + "message": "Resume recording", + "description": "Restart recording modal resume button" + }, + "discardModalTitle": { + "message": "Are you sure you want to discard the recording?", + "description": "Discard recording modal title" + }, + "discardModalDescription": { + "message": "Your current video progress will be lost.", + "description": "Discard recording modal description" + }, + "discardModalDiscard": { + "message": "Discard recording", + "description": "Discard recording modal discard button" + }, + "discardModalResume": { + "message": "Resume recording", + "description": "Discard recording modal resume button" + }, + "recorderSelectTitle": { + "message": "Choose what you want to record", + "description": "Title in recording page" + }, + "recorderSelectProgressTitle": { + "message": "Recording...", + "description": "Title in recording page while recording" + }, + "recorderSelectDescription": { + "message": "Keep this tab open. It will close once your recording has been saved.", + "description": "Description in recording page" + }, + "sandboxProgressTitle": { + "message": "Preparing recording...", + "description": "Title in sandbox page while recording / saving" + }, + "sandboxProgressDescription": { + "message": "Keep this tab open. It will update with your recording when it's ready.", + "description": "Description in sandbox page while recording / saving" + }, + "sandboxEditorMainTitle": { + "message": "Editor", + "description": "Title in navigation of the sandbox editor page" + }, + "sandboxEditorCancelButton": { + "message": "Cancel", + "description": "Cancel button in sandbox editor page" + }, + "sandboxEditorRevertButton": { + "message": "Revert to original", + "description": "Revert button in sandbox editor page" + }, + "sandboxEditorResetButton": { + "message": "Reset", + "description": "Reset button in sandbox editor page" + }, + "sandboxEditorSaveButton": { + "message": "Save changes", + "description": "Save button in sandbox editor page" + }, + "sandboxEditorSaveProgressButton": { + "message": "Saving...", + "description": "Save button in sandbox editor page while saving" + }, + "sandboxAudioDragAndDrop": { + "message": "Drag and drop your audio file", + "description": "Drag and drop audio file in sandbox editor page" + }, + "sandboxAudioOrBrowse": { + "message": "Or click to browse", + "description": "Or click to browse audio file in sandbox editor page" + }, + "sandboxAudioSettingsTitle": { + "message": "Settings", + "description": "Audio settings title in sandbox editor page" + }, + "sandboxAudioVolumeLabel": { + "message": "Volume", + "description": "Audio volume label in sandbox editor page" + }, + "sandboxAudioUpdateButton": { + "message": "Update", + "description": "Update audio button in sandbox editor page" + }, + "sandboxCropTitle": { + "message": "Crop", + "description": "Crop title in sandbox editor page" + }, + "widthLabel": { + "message": "Width", + "description": "Width label for properties" + }, + "heightLabel": { + "message": "Height", + "description": "Height label for properties" + }, + "leftLabel": { + "message": "Left", + "description": "Left label for properties" + }, + "topLabel": { + "message": "Top", + "description": "Top label for properties" + }, + "sandboxEditorTrimInfo": { + "message": "Drag the handles and use the buttons on the left to edit the selected section.", + "description": "Info about trimming in sandbox editor" + }, + "sandboxEditorTrimButton": { + "message": "Trim video", + "description": "Trim button in sandbox editor" + }, + "sandboxEditorTrimProgressButton": { + "message": "Trimming...", + "description": "Trim button in sandbox editor while trimming" + }, + "sandboxEditorCutButton": { + "message": "Cut section", + "description": "Cut button in sandbox editor" + }, + "sandboxEditorCutProgressButton": { + "message": "Cutting...", + "description": "Cut button in sandbox editor while cutting" + }, + "sandboxEditorMuteButton": { + "message": "Mute audio", + "description": "Mute button in sandbox editor" + }, + "sandboxEditorMuteProgressButton": { + "message": "Muting...", + "description": "Mute button in sandbox editor while muting" + }, + "learnMoreDot": { + "message": "Learn more.", + "description": "Learn more with a dot" + }, + "undoLabel": { + "message": "Undo", + "description": "Undo label" + }, + "redoLabel": { + "message": "Redo", + "description": "Redo label" + }, + "leaveReview": { + "message": "Leave a review, it helps!", + "description": "Leave a review button" + }, + "followForUpdates": { + "message": "Follow for updates", + "description": "Follow for updates button" + }, + "offlineLabelTitle": { + "message": "You are currently offline", + "description": "Offline label" + }, + "offlineLabelDescription": { + "message": "Some features are unavailable until reconnected", + "description": "Offline label description" + }, + "offlineLabelTryAgain": { + "message": "Try again", + "description": "Offline label try again button" + }, + "updateChromeLabelTitle": { + "message": "Chrome needs to be updated", + "description": "Update Chrome label" + }, + "updateChromeLabelDescription": { + "message": "Update to access more features", + "description": "Update Chrome label description" + }, + "learnMoreLabel": { + "message": "Learn more", + "description": "Learn more button" + }, + "overLimitLabelTitle": { + "message": "Video too long to process in device", + "description": "Over 5 minutes limit label in editor" + }, + "overLimitLabelDescription": { + "message": "Editing and MP4 export are unavailable", + "description": "Over 5 minutes limit description in editor" + }, + "videoProcessingLabelTitle": { + "message": "The video is processing locally...", + "description": "Video processing label in editor" + }, + "videoProcessingLabelDescription": { + "message": "Learn about the faster cloud version", + "description": "Video processing description in editor" + }, + "sandboxEditTitle": { + "message": "Edit", + "description": "Edit title in sandbox editor page" + }, + "noConnectionLabel": { + "message": "No connection", + "description": "No connection label" + }, + "notAvailableLabel": { + "message": "Not available", + "description": "Not available label" + }, + "editButtonTitle": { + "message": "Edit video", + "description": "Trim label button" + }, + "editButtonDescription": { + "message": "Trim, cut, or mute the video", + "description": "Trim label" + }, + "preparingLabel": { + "message": "Preparing video, please wait...", + "description": "Preparing label" + }, + "cropButtonTitle": { + "message": "Crop", + "description": "Crop label button" + }, + "cropButtonDescription": { + "message": "Crop and resize the video", + "description": "Crop label" + }, + "addAudioButtonTitle": { + "message": "Add audio", + "description": "Add audio label button" + }, + "addAudioButtonDescription": { + "message": "Upload your own audio to add to the video", + "description": "Add audio label" + }, + "sandboxSaveTitle": { + "message": "Save", + "description": "Save title in sandbox editor page" + }, + "signOutDriveLabel": { + "message": "Sign out of Drive", + "description": "Sign out of Google Drive label" + }, + "savingDriveLabel": { + "message": "Saving...", + "description": "Saving to Google Drive label" + }, + "saveDriveButtonTitle": { + "message": "Save to Drive", + "description": "Save to Google Drive button" + }, + "saveDriveButtonDescription": { + "message": "Save the current version to Google Drive", + "description": "Save to Google Drive label" + }, + "signInDriveLabel": { + "message": "Sign in and save to Drive", + "description": "Sign in to Google Drive label" + }, + "sandboxExportTitle": { + "message": "Export", + "description": "Export title in sandbox editor page" + }, + "downloadingLabel": { + "message": "Downloading...", + "description": "Downloading label" + }, + "downloadWEBMButtonTitle": { + "message": "Download as .webm", + "description": "Download WEBM button" + }, + "downloadWEBMButtonDescription": { + "message": "Export a .webm video", + "description": "Download WEBM label" + }, + "downloadMP4ButtonTitle": { + "message": "Download as .mp4", + "description": "Download MP4 button" + }, + "downloadMP4ButtonDescription": { + "message": "Export an .mp4 video (recommended)", + "description": "Download MP4 label" + }, + "downloadGIFButtonTitle": { + "message": "Download as .gif", + "description": "Download GIF button" + }, + "downloadGIFButtonDescription": { + "message": "Export a GIF (max 30 seconds)", + "description": "Download GIF label" + }, + "shareModalSandboxTitle": { + "message": "Share your videos with others", + "description": "Share modal title in sandbox editor page" + }, + "shareModalSandboxDescription": { + "message": "Coming soon! Leave your email to stay updated and be notified when sharing is available.", + "description": "Share modal description in sandbox editor page" + }, + "shareModalSandboxButton": { + "message": "Join the waitlist", + "description": "Share modal email placeholder in sandbox editor page" + }, + "shareSandboxButton": { + "message": "Share video", + "description": "Share button in sandbox editor page" + }, + "replaceAudioEditor": { + "message": "Replace existing audio", + "description": "Replace audio button in editor" + }, + "zoomToPointPopup": { + "message": "Zoom to cursor", + "description": "Zoom to point popup" + }, + "stayInPagePopup": { + "message": "Stay in the page when recording", + "description": "Stay in page popup" + }, + "micReminderPopup": { + "message": "Microphone off warning", + "description": "Mic reminder popup" + }, + "helpPopup": { + "message": "Help", + "description": "Help popup button" + }, + "pausedRecordingToast": { + "message": "Recording paused. Press the play button to resume.", + "description": "Paused recording modal title" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport doesn't have permission to record your screen", + "description": "Permission modal title" + }, + "chromePermissionsModalDescription": { + "message": "To enable screen recording, you must grant MyTechPassport permission to capture your screen when prompted.", + "description": "Permission modal description" + }, + "chromePermissionsModalAction": { + "message": "Enable screen recording", + "description": "Permission modal action" + }, + "chromePermissionsModalCancel": { + "message": "Cancel", + "description": "Permission modal cancel" + }, + "micMutedModalTitle": { + "message": "Your microphone is muted", + "description": "Microphone muted modal title" + }, + "micMutedModalDescription": { + "message": "To include audio in your recording, you'll need to unmute your microphone. Do you want to continue without audio?", + "description": "Microphone muted modal description" + }, + "micMutedModalAction": { + "message": "Yes, continue", + "description": "Microphone muted modal continue" + }, + "micMutedModalCancel": { + "message": "Cancel", + "description": "Microphone muted modal cancel" + }, + "setupTitle": { + "message": "Get started with MyTechPassport in three simple steps:", + "description": "Set up steps title" + }, + "setupStep1Before": { + "message": "1- Click the ", + "description": "Set up step 1, before the icon. It needs a space at the end." + }, + "setupStep1After": { + "message": " extensions icon", + "description": "Set up step 1, after the icon. It needs a space at the beginning." + }, + "setupStep2Before": { + "message": "2- Press the ", + "description": "Set up step 2, before the icon. It needs a space at the end." + }, + "setupStep2After": { + "message": " pin icon", + "description": "Set up step 2, after the icon. It needs a space at the beginning." + }, + "setupStep3Before": { + "message": "3- Click on the ", + "description": "Set up step 3, before the icon. It needs a space at the end." + }, + "setupStep3After": { + "message": " MyTechPassport icon to start", + "description": "Set up step 3, after the icon. It needs a space at the beginning." + }, + "setupCompleteTitle": { + "message": "Awesome! You’re all set", + "description": "Set up complete title" + }, + "setupCompleteDescription": { + "message": "You can now start recording here, or in any other tab.", + "description": "Set up complete description" + }, + "clickHereDrawOnboarding": { + "message": "Click here to draw", + "description": "Click here onboarding" + }, + "countdownMessage": { + "message": "Relax. Click anywhere to stop the countdown.", + "description": "Countdown message" + }, + "sandboxEditorTooSmallInfo": { + "message": "Edits may be inaccurate for short time ranges due to the intervals between frames.", + "description": "Info about the editor being too small" + }, + "processingBannerEditor": { + "message": "Video is processing, playback might be inaccurate or interrupted.", + "description": "Processing banner in editor" + }, + "croppingInfoTitle": { + "message": "Cropping might take a while", + "description": "Cropping info title" + }, + "croppingInfoDescription": { + "message": "Upgrade for faster processing", + "description": "Cropping info description" + }, + "micOnToast": { + "message": "Microphone enabled", + "description": "Microphone enabled toast title" + }, + "micOffToast": { + "message": "Microphone disabled", + "description": "Microphone disabled toast title" + }, + "hideUIAlerts": { + "message": "Hide UI notifications", + "description": "Hide UI alerts button" + }, + "noShowAgain": { + "message": "Don't show again", + "description": "Don't show again button" + }, + "toolbarHoverOnly": { + "message": "Hide toolbar when not in use", + "description": "Only show toolbar on hover button" + }, + "stopRecording": { + "message": "Stop recording", + "description": "Stop recording button in recording scren" + }, + "updateAnnouncementTitle": { + "message": "Welcome to the new MyTechPassport!", + "description": "Update announcement title for existing users" + }, + "updateAnnouncementDescription": { + "message": "We’re introducing a new look and many exciting features, but don’t worry, it’s still the same free, private and open source extension you know and love.", + "description": "Update announcement description for existing users" + }, + "updateAnnouncementLearnMore": { + "message": "Learn more about the update.", + "description": "Update announcement learn more link for existing users" + }, + "updateAnnouncementButton": { + "message": "Get started", + "description": "Update announcement button for existing users" + }, + "streamErrorModalTitle": { + "message": "Error starting the recording", + "description": "Stream error modal title" + }, + "streamErrorModalDescription": { + "message": "Looks like there was an error starting the recording. Restart your browser and try again. If the issue persists, please contact us at support@MyTechPassport.io.", + "description": "Stream error modal description" + }, + "highestQuality": { + "message": "Highest quality", + "description": "Highest quality toggle label in popup" + }, + "restoreRecording": { + "message": "Restore last recording", + "description": "Restore last recording button in popup" + }, + "havingIssuesButton": { + "message": "Having issues?", + "description": "Having issues button in editor" + }, + "havingIssuesModalTitle": { + "message": "Can't see your recording?", + "description": "Having issues modal title in editor" + }, + "havingIssuesModalDescription": { + "message": "If you've completed your recording and find yourself on this page without seeing your video, you can attempt to download the raw video data if it's available. You can also reach out and submit a bug report.", + "description": "Having issues modal description in editor" + }, + "havingIssuesModalButton": { + "message": "Download raw video data", + "description": "Having issues modal button in editor" + }, + "havingIssuesModalButton2": { + "message": "Report bug", + "description": "Having issues modal button 2 in editor" + }, + "noRecordingFound": { + "message": "No recording found, sorry :(", + "description": "No recording found alert in editor" + }, + "memoryLimitTitle": { + "message": "Memory limit reached", + "description": "Memory limit reached title" + }, + "memoryLimitDescription": { + "message": "Your device has run out of memory to record, so the recording has stopped automatically. If you'd like to record for longer, you can try lowering the quality of the video, or clearing up some space on your device.", + "description": "Memory limit reached description" + }, + "understoodButton": { + "message": "Understood", + "description": "Understood button" + }, + "notEnoughSpaceTitle": { + "message": "Not enough space", + "description": "Not enough space title" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassport needs at least 1GB of free space to record. Please free up some space and try again.", + "description": "Not enough space description" + }, + "clearSpaceButton": { + "message": "Clear previous recordings", + "description": "Clear previous recordings button" + }, + "sandboxAdvancedTitle": { + "message": "Advanced", + "description": "Advanced section in sandbox editor page" + }, + "rawRecordingButtonTitle": { + "message": "Download raw video file", + "description": "Download raw recording button" + }, + "rawRecordingButtonDescription": { + "message": "Export the original recording data", + "description": "Download raw recording label" + }, + "troubleshootButtonTitle": { + "message": "Get help with your recording", + "description": "Troubleshoot button" + }, + "troubleShootButtonDescription": { + "message": "Recover your video and solve other issues", + "description": "Troubleshoot label" + }, + "rawRecordingModalTitle": { + "message": "Download raw video file", + "description": "Raw recording modal title" + }, + "rawRecordingModalDescription": { + "message": "The raw video file is the original video file that was recorded by MyTechPassport. This video is not processed or edited, so it may be very large and may not be playable on all devices. If you are having issues with the processed video, you can use this file to recover your video.", + "description": "Raw recording modal description" + }, + "rawRecordingModalButton": { + "message": "Download", + "description": "Raw recording modal button" + }, + "troubleshootModalTitle": { + "message": "Download system information and video data and send for troubleshooting", + "description": "Troubleshoot modal title" + }, + "troubleshootModalDescription": { + "message": "After downloading, send the file to support@MyTechPassportsport.io with any relevant information. We will use this data to help you troubleshoot any issues you are having with the extension, and recover your video if possible.", + "description": "Troubleshoot modal description" + }, + "troubleshootModalButton": { + "message": "Download", + "description": "Troubleshoot modal button" + }, + "overLimitModalTitle": { + "message": "The video is too long to process in your device", + "description": "Over 5 minutes limit modal title" + }, + "overLimitModalDescription": { + "message": "Since MyTechP is completely private and runs locally, it's limited by your device's hardware. Processing a video of this length would take too long, and be very resource intensive. Don't worry, you can still download the WEBM file or the raw recording, but editing and MP4 export are not available. That said, you can still try to process the video anyway, if you understand the risks.", + "description": "Over 5 minutes limit modal description" + }, + "overLimitModalButton": { + "message": "I understand the risk, try anyway", + "description": "Over 5 minutes limit modal button" + }, + "overLimitModalLearnMore": { + "message": "Learn more about processing long videos.", + "description": "Over 5 minutes limit modal learn more link with a dot" + }, + "recoveryModeTitle": { + "message": "Recovery mode", + "description": "Recovery mode title" + }, + "downloadForTroubleshootingOption": { + "message": "Download data for troubleshooting", + "description": "Download for troubleshooting option" + }, + "getHelpNav": { + "message": "Help center", + "description": "Get help nav item" + }, + "audioWarningTitle": { + "message": "Record computer audio", + "description": "Audio warning title" + }, + "audioWarningDescription": { + "message": "To record audio from this page, you need to switch to ‘$tab$’.", + "description": "Audio warning description", + "placeholders": { + "tab": { + "content": "$1", + "example": "Tab area" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Extension not supported on tab", + "description": "Extension not supported on tab" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport wasn't supported in your previous tab. You can still start your recording here and switch back to the tab, but your camera and toolbar won't be visible.", + "description": "Extension not supported on tab description" + }, + "backupsTitle": { + "message": "Set up a local backup for your MyTechPassportsport recordings", + "description": "Backups title" + }, + "backupsDescription1": { + "message": "Keep a copy of all the recordings you make. If you don’t set up backups, your recordings will only be saved when you choose to download them.", + "description": "Backups description" + }, + "backupsDescription2": { + "message": "You might need to create a new folder first if you're trying to save to Downloads or other system folders.", + "description": "Backups description" + }, + "backupsSelectFolder": { + "message": "Select a folder", + "description": "Select a folder button" + }, + "backupsNotNow": { + "message": "Not now", + "description": "Not now button" + }, + "backupsOnTitle": { + "message": " Your recordings are being backed up locally", + "description": "Backups on title" + }, + "backupsOnDescription": { + "message": "To prevent being asked for permissions every time you record, we recommend leaving this tab open.", + "description": "Backups on description" + }, + "backupsClose": { + "message": "Close tab anyway", + "description": "Close tab anyway button" + }, + "backupsStop": { + "message": "Stop backing up all recordings", + "description": "Stop backups button" + }, + "backupsConfirmTitle": { + "message": "Please reconfirm access to your local MyTechPassport backup folder", + "description": "Backups confirm title" + }, + "backupsConfirmDescription": { + "message": "We’re sorry, but we need your permission once more to keep backing up your recordings. Unfortunately we will need to ask every time this tab is closed, which can happen if you close the browser or restart your computer.", + "description": "Backups confirm description" + }, + "backupsConfirmAllow": { + "message": "Allow MyTechPassport to keep backing up recordings", + "description": "Backups confirm allow button" + }, + "backupsToggle": { + "message": "Back up recordings", + "description": "Backups toggle label" + }, + "backupPermissionFailTitle": { + "message": "Permission not granted to back up the recording", + "description": "Backup permission fail title" + }, + "backupPermissionFailDescription": { + "message": "You didn't select a folder to backup your recordings. Depending on your browser version or operating system you might be asked to select the folder every time you start recording. You can try again, or disable backups entirely if you'd rather not give permissions repeatedly.", + "description": "Backup permission fail description" + }, + "recordAudioWarningMacTitle": { + "message": "Record computer audio", + "description": "Record audio warning title" + }, + "recordAudioWarningMacDescription": { + "message": "In macOS, you can only record Tab audio. Select the Chrome Tab option and make sure 'Also share tab audio' is enabled.", + "description": "macOS audio warning description" + }, + "recordAudioWarningOtherTitle": { + "message": "Record computer audio", + "description": "Record audio warning title" + }, + "recordAudioWarningOtherDescription": { + "message": "Make sure to enable the option to 'Share system audio' if you want to record computer audio. If you don't see this option, try updating Chrome, or switch to Tab recording.", + "description": "Other audio warning description" + }, + "maxResolutionLabel": { + "message": "Max resolution", + "description": "Max resolution label in settings menu" + }, + "maxFPSLabel": { + "message": "Max FPS", + "description": "Max FPS label in settings menu" + }, + "notEnoughRAM": { + "message": "Not enough RAM", + "description": "Not enough RAM label in settings menu" + }, + "resizeWindowLabel": { + "message": "Resize window", + "description": "Resize window label in settings menu" + }, + "screenTooSmallTooltip": { + "message": "The screen is too small for this resolution", + "description": "Screen too small tooltip in settings menu" + }, + "maxResolutionTooltip": { + "message": "Cannot record at this resolution in your device", + "description": "Maxed out resolution tooltip in settings menu" + }, + "permissionsModalReview": { + "message": "Review permissions", + "description": "Review permissions button" + } +} diff --git a/build/_locales/es/messages.json b/build/_locales/es/messages.json new file mode 100644 index 0000000..a40fa8e --- /dev/null +++ b/build/_locales/es/messages.json @@ -0,0 +1,1040 @@ +{ + "extName": { + "message": "MyTechPassport - Graba y anota tu pantalla", + "description": "Nombre de la extensión" + }, + "extDesc": { + "message": "La mejor grabadora de pantalla gratis para Chrome sin límites. Captura, dibuja, amplía, desenfoca, edita vídeos y mucho más, sin necesidad de registro y totalmente privada.", + "description": "Descripción de la extensión" + }, + "recordTab": { + "message": "Grabar", + "description": "Etiqueta de la pestaña Grabar en el menú desplegable" + }, + "videosTab": { + "message": "Tus vídeos", + "description": "Etiqueta de la pestaña Tus vídeos en el menú desplegable" + }, + "screenType": { + "message": "Pantalla", + "description": "Etiqueta de tipo de grabación de pantalla en el menú desplegable" + }, + "tabType": { + "message": "Área", + "description": "Etiqueta de tipo de grabación de área de pestaña en el menú desplegable" + }, + "cameraType": { + "message": "Cámara", + "description": "Etiqueta de tipo de grabación de cámara en el menú desplegable" + }, + "mockupType": { + "message": "Mockup", + "description": "Etiqueta de tipo de grabación de maqueta en el menú desplegable" + }, + "customAreaRecordingDisabledTitle": { + "message": "Grabación de área personalizada deshabilitada", + "description": "Título del aviso de grabación de área personalizada deshabilitada en versiones de Chrome anteriores a la 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Actualiza Chrome a la version 110+", + "description": "Descripción del aviso de grabación de área personalizada deshabilitada en versiones de Chrome anteriores a la 104" + }, + "customAreaRecordingDisabledAction": { + "message": "Actualizar", + "description": "Acción del aviso de grabación de área personalizada deshabilitada en versiones de Chrome anteriores a la 104" + }, + "permissionsModalTitle": { + "message": "Verifica tus permisos", + "description": "Título del modal de advertencia de permisos de cámara/micrófono" + }, + "permissionsModalDescription": { + "message": "Parece que MyTechPassportsport no puede acceder a tu cámara o micrófono. Permite el acceso haciendo clic en el icono de la cámara en la barra de direcciones.", + "description": "Descripción del modal de advertencia de permisos de cámara/micrófono" + }, + "permissionsModalDismiss": { + "message": "Descartar", + "description": "Botón de descartar del modal de advertencia de permisos de cámara/micrófono" + }, + "allowCameraAccessButton": { + "message": "Permitir acceso a la cámara", + "description": "Botón de permitir acceso a la cámara" + }, + "allowMicrophoneAccessButton": { + "message": "Permitir acceso al micrófono", + "description": "Botón de permitir acceso al micrófono" + }, + "pushToTalkLabel": { + "message": "Pulsar para hablar", + "description": "Etiqueta del interruptor de pulsar para hablar" + }, + "customAreaLabel": { + "message": "Establecer un área de grabación", + "description": "Etiqueta del interruptor de área personalizada" + }, + "flipCameraLabel": { + "message": "Voltear cámara", + "description": "Etiqueta del interruptor de voltear cámara" + }, + "backgroundEffectsLabel": { + "message": "Efectos de fondo", + "description": "Etiqueta del interruptor de efectos de fondo" + }, + "recordButtonLabel": { + "message": "Iniciar grabación", + "description": "Etiqueta del botón de grabación" + }, + "recordButtonNoCameraLabel": { + "message": "Selecciona una cámara para grabar", + "description": "Etiqueta del botón de grabación cuando está en modo de cámara y no se ha seleccionado ninguna cámara" + }, + "recordButtonInProgressLabel": { + "message": "Iniciando grabación...", + "description": "Etiqueta del botón de grabación en progreso" + }, + "showMoreOptionsLabel": { + "message": "Mostrar más opciones", + "description": "Etiqueta de mostrar más opciones" + }, + + "systemAudioLabel": { + "message": "Incluir audio del sistema", + "description": "Etiqueta de audio del sistema/tabulador" + }, + "hideToolbarLabel": { + "message": "Ocultar barra de herramientas", + "description": "Etiqueta de ocultar barra de herramientas" + }, + "countdownLabel": { + "message": "Cuenta atrás", + "description": "Etiqueta de cuenta atrás" + }, + "alarmLabel": { + "message": "Establecer límite de tiempo", + "description": "Etiqueta de alarma" + }, + "blurTypeLabel": { + "message": "Blur", + "description": "Etiqueta de fondo de desenfoque" + }, + "noneDropdownLabel": { + "message": "Ninguno", + "description": "Ningún dispositivo seleccionado" + }, + "noCameraDropdownLabel": { + "message": "Sin cámara", + "description": "Ninguna cámara seleccionada" + }, + "noMicrophoneDropdownLabel": { + "message": "Sin micrófono", + "description": "Ningún micrófono seleccionado" + }, + "selectSourceDropdownPlaceholder": { + "message": "Seleccionar una fuente", + "description": "Marcador de posición de selección de fuente" + }, + "offLabel": { + "message": "Apagado", + "description": "Etiqueta de apagar en el menú desplegable" + }, + "regionWidthLabel": { + "message": "Ancho", + "description": "Etiqueta de ancho de región" + }, + "regionHeightLabel": { + "message": "Alto", + "description": "Etiqueta de alto de región" + }, + "addImageToastTitle": { + "message": "Haz clic para colocar la imagen", + "description": "Mensaje emergente al agregar una nueva imagen" + }, + "finishRecordingTooltip": { + "message": "Finalizar grabación", + "description": "Consejo para finalizar la grabación" + }, + "restartRecordingTooltip": { + "message": "Reiniciar grabación", + "description": "Consejo para reiniciar la grabación" + }, + "pauseRecordingTooltip": { + "message": "Pausar grabación", + "description": "Consejo para pausar la grabación" + }, + "resumeRecordingTooltip": { + "message": "Reanudar grabación", + "description": "Consejo para reanudar la grabación" + }, + "cancelRecordingTooltip": { + "message": "Cancelar grabación", + "description": "Consejo para cancelar la grabación" + }, + "toggleDrawingToolsTooltip": { + "message": "Herramientas de dibujo", + "description": "Consejo para alternar herramientas de dibujo" + }, + "toggleBlurToolTooltip": { + "message": "Herramienta de desenfoque", + "description": "Consejo para alternar herramientas de desenfoque" + }, + "toggleCursorOptionsTooltip": { + "message": "Opciones de cursor", + "description": "Consejo para alternar opciones de cursor" + }, + "disableCameraTooltip": { + "message": "Desactivar cámara", + "description": "Consejo para desactivar la cámara" + }, + "enableCameraTooltip": { + "message": "Activar cámara", + "description": "Consejo para activar la cámara" + }, + "noCameraPermissionsTooltip": { + "message": "Sin permisos de cámara", + "description": "Consejo para sin permisos de cámara" + }, + "disableMicrophoneTooltip": { + "message": "Desactivar micrófono", + "description": "Consejo para desactivar el micrófono" + }, + "enableMicrophoneTooltip": { + "message": "Activar micrófono", + "description": "Consejo para activar el micrófono" + }, + "noMicrophonePermissionsTooltip": { + "message": "Sin permisos de micrófono", + "description": "Consejo para sin permisos de micrófono" + }, + "selectToolTooltip": { + "message": "Herramienta de selecciones", + "description": "Consejo para seleccionar herramienta" + }, + "penToolTooltip": { + "message": "Lápiz", + "description": "Consejo para herramienta de bolígrafo" + }, + "highlighterToolTooltip": { + "message": "Resaltador", + "description": "Consejo para herramienta de resaltador" + }, + "eraserToolTooltip": { + "message": "Borrador", + "description": "Consejo para herramienta de borrador" + }, + "textToolTooltip": { + "message": "Texto", + "description": "Consejo para herramienta de texto" + }, + "shapeToolTooltip": { + "message": "Formas", + "description": "Consejo para herramienta de formas" + }, + "arrowToolTooltip": { + "message": "Flecha", + "description": "Consejo para herramienta de flecha" + }, + "imageToolTooltip": { + "message": "Imágenes", + "description": "Consejo para herramienta de imagen" + }, + "undoTooltip": { + "message": "Deshacer", + "description": "Consejo para deshacer" + }, + "redoTooltip": { + "message": "Rehacer", + "description": "Consejo para rehacer" + }, + "clearCanvasTooltip": { + "message": "Borrar lienzo", + "description": "Consejo para borrar lienzo" + }, + "moreColorsTooltip": { + "message": "Más colores", + "description": "Consejo para más colores" + }, + "thickStrokeTooltip": { + "message": "Trazo grueso", + "description": "Consejo para trazo grueso" + }, + "mediumStrokeTooltip": { + "message": "Trazo medio", + "description": "Consejo para trazo medio" + }, + "thinStrokeTooltip": { + "message": "Trazo fino", + "description": "Consejo para trazo fino" + }, + "togglePictureinPictureModeTooltip": { + "message": "Modo Picture-in-Picture (PIP)", + "description": "Consejo para alternar el modo imagen en imagen" + }, + "toggleFillTooltip": { + "message": "Alternar relleno", + "description": "Consejo para alternar relleno" + }, + "drawingModeToast": { + "message": "Modo de dibujo", + "description": "Mensaje emergente de modo de dibujo" + }, + "blurModeToast": { + "message": "Modo de desenfoque", + "description": "Mensaje emergente de modo de desenfoque" + }, + "clearBlurredElementsTooltip": { + "message": "Borrar todos los elementos desenfocados", + "description": "Consejo para borrar todos los elementos desenfocados" + }, + "highlightClicksTooltip": { + "message": "Resaltar clics", + "description": "Consejo para resaltar clics" + }, + "highlightCursorTooltip": { + "message": "Resaltar cursor", + "description": "Consejo para resaltar cursor" + }, + "spotlightCursorTooltip": { + "message": "Foco en cursor", + "description": "Consejo para foco en cursor" + }, + "permissionsModalNoShowAgain": { + "message": "No volver a mostrar", + "description": "Botón de descartar del modal de advertencia de permisos" + }, + "restartModalTitle": { + "message": "¿Seguro que quieres reiniciar la grabación?", + "description": "Título del modal de reinicio de grabación" + }, + "restartModalDescription": { + "message": "Se perderá todo tu progreso.", + "description": "Descripción del modal de reinicio de grabación" + }, + "restartModalRestart": { + "message": "Reiniciar grabación", + "description": "Botón de reinicio de grabación en el modal" + }, + "restartModalResume": { + "message": "Reanudar grabación", + "description": "Botón de reanudar grabación en el modal" + }, + "discardModalTitle": { + "message": "¿Seguro que quieres descartar la grabación?", + "description": "Título del modal de descarte de grabación" + }, + "discardModalDescription": { + "message": "Se perderá todo tu progreso.", + "description": "Descripción del modal de descarte de grabación" + }, + "discardModalDiscard": { + "message": "Descartar grabación", + "description": "Botón de descarte de grabación en el modal" + }, + "discardModalResume": { + "message": "Reanudar grabación", + "description": "Botón de reanudar grabación en el modal" + }, + "recorderSelectTitle": { + "message": "Elige qué quieres grabar", + "description": "Título en la página de grabación" + }, + "recorderSelectProgressTitle": { + "message": "Grabando...", + "description": "Título en la página de grabación mientras se está grabando" + }, + "recorderSelectDescription": { + "message": "Mantén esta pestaña abierta. Se cerrará una vez que se haya guardado tu grabación.", + "description": "Descripción en la página de grabación" + }, + "sandboxProgressTitle": { + "message": "Preparando la grabación...", + "description": "Título en la página de pruebas mientras se graba/guarda" + }, + "sandboxProgressDescription": { + "message": "Deja esta pestaña abierta. Se actualizará con tu grabación cuando esté lista.", + "description": "Descripción en la página de pruebas mientras se graba/guarda" + }, + "sandboxEditorMainTitle": { + "message": "Editor", + "description": "Título en la navegación de la página del editor de pruebas" + }, + "sandboxEditorCancelButton": { + "message": "Cancelar", + "description": "Botón de cancelar en la página del editor de pruebas" + }, + "sandboxEditorRevertButton": { + "message": "Volver al original", + "description": "Botón de revertir en la página del editor de pruebas" + }, + "sandboxEditorResetButton": { + "message": "Restablecer", + "description": "Botón de restablecer en la página del editor de pruebas" + }, + "sandboxEditorSaveButton": { + "message": "Guardar cambios", + "description": "Botón de guardar en la página del editor de pruebas" + }, + "sandboxEditorSaveProgressButton": { + "message": "Guardando...", + "description": "Botón de guardar en la página del editor de pruebas mientras se guarda" + }, + "sandboxAudioDragAndDrop": { + "message": "Arrastra tu archivo de audio", + "description": "Arrastra y suelta archivo de audio en la página del editor de pruebas" + }, + "sandboxAudioOrBrowse": { + "message": "O haz clic para buscar", + "description": "O haz clic para buscar archivo de audio en la página del editor de pruebas" + }, + "sandboxAudioSettingsTitle": { + "message": "Configuración", + "description": "Título de configuración de audio en la página del editor de pruebas" + }, + "sandboxAudioVolumeLabel": { + "message": "Volumen", + "description": "Etiqueta de volumen de audio en la página del editor de pruebas" + }, + "sandboxAudioUpdateButton": { + "message": "Aplicar", + "description": "Botón de actualizar audio en la página del editor de pruebas" + }, + "sandboxCropTitle": { + "message": "Recortar", + "description": "Título de recorte en la página del editor de pruebas" + }, + "widthLabel": { + "message": "Ancho", + "description": "Etiqueta de ancho para propiedades" + }, + "heightLabel": { + "message": "Alto", + "description": "Etiqueta de alto para propiedades" + }, + "leftLabel": { + "message": "Izquierda", + "description": "Etiqueta de izquierda para propiedades" + }, + "topLabel": { + "message": "Arriba", + "description": "Etiqueta de arriba para propiedades" + }, + "sandboxEditorTrimInfo": { + "message": "Arrastra las asas y usa los botones a la izquierda para editar la sección seleccionada.", + "description": "Información sobre recorte en el editor de pruebas" + }, + "sandboxEditorTrimButton": { + "message": "Recortar vídeo", + "description": "Botón de recortar en el editor de pruebas" + }, + "sandboxEditorTrimProgressButton": { + "message": "Recortando...", + "description": "Botón de recortar en el editor de pruebas mientras se recorta" + }, + "sandboxEditorCutButton": { + "message": "Quitar sección", + "description": "Botón de cortar en el editor de pruebas" + }, + "sandboxEditorCutProgressButton": { + "message": "Quitando...", + "description": "Botón de cortar en el editor de pruebas mientras se corta" + }, + "sandboxEditorMuteButton": { + "message": "Silenciar audio", + "description": "Botón de silenciar en el editor de pruebas" + }, + "sandboxEditorMuteProgressButton": { + "message": "Silenciando...", + "description": "Botón de silenciar en el editor de pruebas mientras se silencia" + }, + "learnMoreDot": { + "message": "Aprende más.", + "description": "Aprende más con un punto" + }, + "undoLabel": { + "message": "Deshacer", + "description": "Etiqueta de deshacer" + }, + "redoLabel": { + "message": "Rehacer", + "description": "Etiqueta de rehacer" + }, + "leaveReview": { + "message": "Deja una reseña", + "description": "Botón de dejar una reseña" + }, + "followForUpdates": { + "message": "Mantente informado", + "description": "Botón de seguir para actualizaciones" + }, + "offlineLabelTitle": { + "message": "Sin conexión", + "description": "Etiqueta de sin conexión" + }, + "offlineLabelDescription": { + "message": "Algunas funciones no están disponibles ", + "description": "Descripción de la etiqueta de sin conexión" + }, + "offlineLabelTryAgain": { + "message": "Intenta de nuevo", + "description": "Botón de intentar de nuevo de la etiqueta de sin conexión" + }, + "updateChromeLabelTitle": { + "message": "Chrome necesita actualizarse", + "description": "Etiqueta de actualizar Chrome" + }, + "updateChromeLabelDescription": { + "message": "Actualiza para acceder más funciones", + "description": "Descripción de la etiqueta de actualizar Chrome" + }, + "learnMoreLabel": { + "message": "Aprende más", + "description": "Botón de aprender más" + }, + "overLimitLabelTitle": { + "message": "Video demasiado largo para procesar en tu dispositivo", + "description": "Etiqueta de límite de más de 5 minutos en el editor" + }, + "overLimitLabelDescription": { + "message": "La edición y descarga en formato MP4 no están disponibles", + "description": "Descripción de límite de más de 5 minutos en el editor" + }, + "videoProcessingLabelTitle": { + "message": "El vídeo se está procesando...", + "description": "Etiqueta de procesamiento de vídeo en el editor" + }, + "videoProcessingLabelDescription": { + "message": "Subscríbete para editar vídeos más rápido", + "description": "Descripción del procesamiento de vídeo en el editor" + }, + "sandboxEditTitle": { + "message": "Editar", + "description": "Título de edición en la página del editor de pruebas" + }, + "noConnectionLabel": { + "message": "Sin conexión", + "description": "Etiqueta de sin conexión" + }, + "notAvailableLabel": { + "message": "No está disponible", + "description": "Etiqueta de no disponible" + }, + "editButtonTitle": { + "message": "Editar vídeo", + "description": "Etiqueta de botón de recorte" + }, + "editButtonDescription": { + "message": "Corta o silencia el vídeo", + "description": "Etiqueta de recorte" + }, + "preparingLabel": { + "message": "Preparando el vídeo, por favor espera...", + "description": "Etiqueta de preparación" + }, + "cropButtonTitle": { + "message": "Recortar", + "description": "Etiqueta de botón de recorte" + }, + "cropButtonDescription": { + "message": "Recorta y redimensiona el vídeo", + "description": "Etiqueta de recorte" + }, + "addAudioButtonTitle": { + "message": "Añadir audio", + "description": "Etiqueta de botón de añadir audio" + }, + "addAudioButtonDescription": { + "message": "Sube tu propio audio para añadir al vídeo", + "description": "Etiqueta de añadir audio" + }, + "sandboxSaveTitle": { + "message": "Integraciones", + "description": "Título de guardar en la página del editor de pruebas" + }, + "signOutDriveLabel": { + "message": "Cerrar sesión en Google Drive", + "description": "Etiqueta de cerrar sesión en Google Drive" + }, + "savingDriveLabel": { + "message": "Guardando...", + "description": "Etiqueta de guardado en Google Drive" + }, + "saveDriveButtonTitle": { + "message": "Guardar en Drive", + "description": "Botón de guardar en Google Drive" + }, + "saveDriveButtonDescription": { + "message": "Guarda la versión actual en Google Drive", + "description": "Etiqueta de guardar en Google Drive" + }, + "signInDriveLabel": { + "message": "Inicia sesión y guarda en Drive", + "description": "Etiqueta de iniciar sesión en Google Drive" + }, + "sandboxExportTitle": { + "message": "Exportar", + "description": "Título de exportación en la página del editor de pruebas" + }, + "downloadingLabel": { + "message": "Descargando...", + "description": "Etiqueta de descarga" + }, + "downloadWEBMButtonTitle": { + "message": "Descargar como .webm", + "description": "Botón de descargar WEBM" + }, + "downloadWEBMButtonDescription": { + "message": "Exporta un vídeo .webm", + "description": "Etiqueta de descargar WEBM" + }, + "downloadMP4ButtonTitle": { + "message": "Descargar como .mp4", + "description": "Botón de descargar MP4" + }, + "downloadMP4ButtonDescription": { + "message": "Exporta un vídeo .mp4 (recomendado)", + "description": "Etiqueta de descargar MP4" + }, + "downloadGIFButtonTitle": { + "message": "Descargar como .gif", + "description": "Botón de descargar GIF" + }, + "downloadGIFButtonDescription": { + "message": "Exporta un GIF (máximo 30 segundos)", + "description": "Etiqueta de descargar GIF" + }, + "shareModalSandboxTitle": { + "message": "Comparte tus videos con un enlace", + "description": "Título del modal de compartir en la página del editor de pruebas" + }, + "shareModalSandboxDescription": { + "message": "¡Próximamente! Deja tu correo electrónico para mantenerte actualizado y recibir notificaciones cuando esté disponible.", + "description": "Descripción del modal de compartir en la página del editor de pruebas" + }, + "shareModalSandboxButton": { + "message": "Únete a la lista de espera", + "description": "Espacio reservado para el correo electrónico en el modal de compartir en la página del editor de pruebas" + }, + "shareSandboxButton": { + "message": "Compartir video", + "description": "Botón de compartir en la página del editor de pruebas" + }, + "replaceAudioEditor": { + "message": "Reemplazar audio existente", + "description": "Botón de reemplazo de audio en el editor" + }, + "zoomToPointPopup": { + "message": "Zoom al cursor", + "description": "Ventana emergente de zoom al punto" + }, + "stayInPagePopup": { + "message": "Mantenente en la página al grabar", + "description": "Ventana emergente de permanecer en la página" + }, + "micReminderPopup": { + "message": "Muestra un aviso si el micrófono está desactivado", + "description": "Ventana emergente de recordatorio de micrófono" + }, + "helpPopup": { + "message": "Ayuda", + "description": "Botón de ventana emergente de ayuda" + }, + "pausedRecordingToast": { + "message": "Grabación aturada. Presiona el botón de reproducción para continuar.", + "description": "Título del modal de grabación en pausa" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport no tiene permiso para grabar tu pantalla", + "description": "Título del modal de permisos" + }, + "chromePermissionsModalDescription": { + "message": "Para habilitar la grabación de pantalla, debes conceder permisos a MyTechPassportsportsport.", + "description": "Descripción del modal de permisos" + }, + "chromePermissionsModalAction": { + "message": "Habilitar la grabación de pantalla", + "description": "Acción del modal de permisos" + }, + "chromePermissionsModalCancel": { + "message": "Cancelar", + "description": "Cancelar del modal de permisos" + }, + "micMutedModalTitle": { + "message": "Tu micrófono está apagado", + "description": "Título del modal de micrófono apagado" + }, + "micMutedModalDescription": { + "message": "Para incluir audio en tu grabación, deberás activar tu micrófono. ¿Quieres continuar sin audio?", + "description": "Descripción del modal de micrófono apagado" + }, + "micMutedModalAction": { + "message": "Sí, continuar", + "description": "Continuar del modal de micrófono apagado" + }, + "micMutedModalCancel": { + "message": "Cancelar", + "description": "Cancelar del modal de micrófono apagado" + }, + "setupTitle": { + "message": "Empieza a utilizar MyTechPassportsport con tres pasos sencillos:", + "description": "Título de los pasos de configuración" + }, + "setupStep1Before": { + "message": "1- Haz clic en el ", + "description": "Paso 1 de configuración, antes del icono. Necesita un espacio al final." + }, + "setupStep1After": { + "message": " icono de extensiones", + "description": "Paso 1 de configuración, después del icono. Necesita un espacio al principio." + }, + "setupStep2Before": { + "message": "2- Presiona el ", + "description": "Paso 2 de configuración, antes del icono. Necesita un espacio al final." + }, + "setupStep2After": { + "message": " icono de alfiler", + "description": "Paso 2 de configuración, después del icono. Necesita un espacio al principio." + }, + "setupStep3Before": { + "message": "3- Haz clic en el ", + "description": "Paso 3 de configuración, antes del icono. Necesita un espacio al final." + }, + "setupStep3After": { + "message": " icono de MyTechPassport para empezar", + "description": "Paso 3 de configuración, después del icono. Necesita un espacio al principio." + }, + "setupCompleteTitle": { + "message": "¡Genial! Ya estás listo", + "description": "Título de configuración completada" + }, + "setupCompleteDescription": { + "message": "Ahora puedes comenzar a grabar aquí o en cualquier otra pestaña.", + "description": "Descripción de configuración completada" + }, + "clickHereDrawOnboarding": { + "message": "Haz clic aquí para dibujar", + "description": "Instrucciones para hacer clic aquí" + }, + "countdownMessage": { + "message": "Relájate. Haz clic en cualquier lugar para detener la cuenta regresiva.", + "description": "Mensaje de cuenta regresiva" + }, + "sandboxEditorTooSmallInfo": { + "message": "La edición del vídeo puede ser imprecisa debido a los intervalos entre fotogramas con duraciones cortas.", + "description": "Información sobre el editor siendo demasiado pequeño" + }, + "processingBannerEditor": { + "message": "El video se está procesando, la reproducción puede ser imprecisa o interrumpida.", + "description": "Banner de procesamiento en el editor" + }, + "croppingInfoTitle": { + "message": "Recortar el vídeo puede llevar algún tiempo", + "description": "Título de la información de recorte" + }, + "croppingInfoDescription": { + "message": "Subscríbete para editar vídeos más rápido", + "description": "Descripción de la información de recorte" + }, + "micOnToast": { + "message": "Micrófono activado", + "description": "Título del aviso de micrófono habilitado" + }, + "micOffToast": { + "message": "Micrófono desactivado", + "description": "Título del aviso de micrófono deshabilitado" + }, + "hideUIAlerts": { + "message": "Ocultar las notificaciones de la interfaz", + "description": "Botón para ocultar las alertas de la interfaz" + }, + "noShowAgain": { + "message": "No mostrar de nuevo", + "description": "Botón de no mostrar de nuevo" + }, + "toolbarHoverOnly": { + "message": "Oculta los controles cuando no los uses", + "description": "Botón para mostrar la barra de herramientas solo al pasar el cursor" + }, + + "stopRecording": { + "message": "Detener grabación", + "description": "Stop recording button in recording screen" + }, + "updateAnnouncementTitle": { + "message": "¡Bienvenido al nuevo MyTechPassport!", + "description": "Título del anuncio de actualización para usuarios existentes" + }, + "updateAnnouncementDescription": { + "message": "Hemos actualizado el diseño y desarrollado nuevas funcionalidades, pero no te preocupes, sigue siendo la misma extensión gratuita, privada y de código abierto.", + "description": "Descripción del anuncio de actualización para usuarios existentes" + }, + "updateAnnouncementLearnMore": { + "message": "Obtén más información sobre la actualización.", + "description": "Enlace 'Obtener más información' del anuncio de actualización para usuarios existentes" + }, + "updateAnnouncementButton": { + "message": "Empezar", + "description": "Botón del anuncio de actualización para usuarios existentes" + }, + "streamErrorModalTitle": { + "message": "Error al iniciar la grabación", + "description": "Título del modal de error de transmisión" + }, + "streamErrorModalDescription": { + "message": "Hubo un error al iniciar la grabación. Reinicia tu navegador e inténtalo de nuevo. Si el problema persiste, por favor, contáctanos en support@MyTechPassport.io.", + "description": "Descripción del modal de error de transmisión" + }, + "highestQuality": { + "message": "Mejor calidad", + "description": "Etiqueta de alternar la mejor calidad en el popup" + }, + "restoreRecording": { + "message": "Restablecer última grabación", + "description": "Botón para restaurar la última grabación en el popup" + }, + "havingIssuesButton": { + "message": "¿Tienes problemas?", + "description": "Botón de problemas en el editor" + }, + "havingIssuesModalTitle": { + "message": "¿No puedes ver tu grabación?", + "description": "Título del modal de problemas en el editor" + }, + "havingIssuesModalDescription": { + "message": "Si has completado tu grabación y te encuentras en esta página sin ver tu video, puedes intentar descargar los datos de video sin procesar si están disponibles. También puedes ponerte en contacto y enviar un informe de error.", + "description": "Descripción del modal de problemas en el editor" + }, + "havingIssuesModalButton": { + "message": "Descargar datos de video sin procesar", + "description": "Botón del modal de problemas en el editor" + }, + "havingIssuesModalButton2": { + "message": "Informar un error", + "description": "Segundo botón del modal de problemas en el editor" + }, + "noRecordingFound": { + "message": "No se encontró ninguna grabación, lo siento :(", + "description": "Alerta de no se encontró ninguna grabación en el editor" + }, + "memoryLimitTitle": { + "message": "Límite de memoria alcanzado", + "description": "Título de límite de memoria alcanzado" + }, + "memoryLimitDescription": { + "message": "Tu dispositivo se ha quedado sin memoria para grabar, por lo que la grabación se ha detenido automáticamente. Si deseas grabar durante más tiempo, puedes intentar reducir la calidad del vídeo o liberar espacio en tu dispositivo.", + "description": "Descripción de límite de memoria alcanzado" + }, + "understoodButton": { + "message": "Entendido", + "description": "Botón de entendido" + }, + "notEnoughSpaceTitle": { + "message": "Espacio insuficiente", + "description": "Título de espacio insuficiente" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassport necesita al menos 1 GB de espacio libre para grabar. Por favor, libera espacio y vuelve a intentarlo.", + "description": "Descripción de espacio insuficiente" + }, + "clearSpaceButton": { + "message": "Eliminar grabaciones anteriores", + "description": "Botón de eliminar grabaciones anteriores" + }, + "sandboxAdvancedTitle": { + "message": "Avanzado", + "description": "Sección avanzada en la página del editor en el entorno seguro" + }, + "rawRecordingButtonTitle": { + "message": "Descargar archivo de video sin procesar", + "description": "Botón de descarga de grabación sin procesar" + }, + "rawRecordingButtonDescription": { + "message": "Exporta los datos de grabación originales", + "description": "Etiqueta de descarga de grabación sin procesar" + }, + "troubleshootButtonTitle": { + "message": "Obtener ayuda con tu grabación", + "description": "Botón de solución de problemas" + }, + "troubleShootButtonDescription": { + "message": "Recupera tu video y resuelve otros problemas", + "description": "Etiqueta de solución de problemas" + }, + "rawRecordingModalTitle": { + "message": "Descargar archivo de video sin procesar", + "description": "Título del modal de grabación sin procesar" + }, + "rawRecordingModalDescription": { + "message": "El archivo de video sin procesar es el video original grabado por MyTechPassport. Este video no ha sido procesado ni editado, por lo que puede ser muy grande y es posible que no se pueda reproducir en todos los dispositivos. Si tienes problemas con el video procesado, puedes usar este archivo para recuperar tu video.", + "description": "Descripción del modal de grabación sin procesar" + }, + "rawRecordingModalButton": { + "message": "Descargar", + "description": "Botón del modal de grabación sin procesar" + }, + "troubleshootModalTitle": { + "message": "Descargar información del sistema y datos de video para enviar y solucionar problemas", + "description": "Título del modal de solución de problemas" + }, + "troubleshootModalDescription": { + "message": "Después de descargar, envía el archivo a support@MyTechPassport.io con cualquier información relevante. Utilizaremos estos datos para ayudarte a solucionar cualquier problema que tengas con la extensión y, si es posible, recuperar tu video.", + "description": "Descripción del modal de solución de problemas" + }, + "troubleshootModalButton": { + "message": "Descargar", + "description": "Botón del modal de solución de problemas" + }, + "overLimitModalTitle": { + "message": "El video es demasiado largo para procesarse en tu dispositivo", + "description": "Título del modal de límite de más de 5 minutos" + }, + "overLimitModalDescription": { + "message": "Dado que MyTechPassport es completamente privado y se ejecuta localmente, está limitado por el hardware de tu dispositivo. Procesar un video de esta longitud llevaría demasiado tiempo y sería muy intensivo en recursos. No te preocupes, aún puedes descargar el archivo WEBM o la grabación sin procesar, pero la edición y la exportación a MP4 no están disponibles. Dicho esto, aún puedes intentar procesar el video de todos modos si comprendes los riesgos.", + "description": "Descripción del modal de límite de más de 5 minutos" + }, + "overLimitModalButton": { + "message": "Entiendo el riesgo, intentalo de todos modos", + "description": "Botón del modal de límite de más de 5 minutos" + }, + "overLimitModalLearnMore": { + "message": "Obtén más información sobre el procesamiento de videos largos.", + "description": "Enlace 'Obtener más información' del modal de límite de más de 5 minutos con un punto" + }, + "recoveryModeTitle": { + "message": "Modo de recuperación", + "description": "Título del modo de recuperación" + }, + "downloadForTroubleshootingOption": { + "message": "Descargar datos para solucionar problemas", + "description": "Opción de descarga para solución de problemas" + }, + "getHelpNav": { + "message": "Centro de ayuda", + "description": "Elemento de navegación de ayuda" + }, + "audioWarningTitle": { + "message": "Grabar audio de la página", + "description": "Título de advertencia de audio" + }, + "audioWarningDescription": { + "message": "Para grabar audio de esta página, debes utilizar la opción de '$tab$'.", + "description": "Descripción de advertencia de audio", + "placeholders": { + "tab": { + "content": "$1", + "example": "Área de la pestaña" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Extensión no compatible en la página", + "description": "Título de extensión no compatible en la pestaña" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport no fue compatible en tu pestaña anterior. Aún así, puedes comenzar tu grabación aquí y luego cambiar a la pestaña, pero tu cámara y barra de herramientas no serán visibles.", + "description": "Descripción de extensión no compatible en la pestaña" + }, + "backupsTitle": { + "message": "Configurar una copia de seguridad local para tus grabaciones de MyTechPassport", + "description": "Título de copias de seguridad" + }, + "backupsDescription1": { + "message": "Mantén una copia de todas las grabaciones que hagas. Si no configuras copias de seguridad, tus grabaciones solo se guardarán cuando decidas descargarlas.", + "description": "Descripción de copias de seguridad" + }, + "backupsDescription2": { + "message": "Es posible que necesites crear una nueva carpeta primero si estás intentando guardar en Descargas u otras carpetas del sistema.", + "description": "Descripción de copias de seguridad" + }, + "backupsSelectFolder": { + "message": "Seleccionar una carpeta", + "description": "Botón Seleccionar carpeta" + }, + "backupsNotNow": { + "message": "Ahora no", + "description": "Botón Ahora no" + }, + "backupsOnTitle": { + "message": "Tus grabaciones se están sincronizadas localmente", + "description": "Título de copias de seguridad activadas" + }, + "backupsOnDescription": { + "message": "Para evitar solicitar permisos cada vez que grabas, te recomendamos dejar esta pestaña abierta.", + "description": "Descripción de copias de seguridad activadas" + }, + "backupsClose": { + "message": "Cerrar pestaña de todos modos", + "description": "Botón Cerrar pestaña de todos modos" + }, + "backupsStop": { + "message": "Detener las copias de seguridad de todas las grabaciones", + "description": "Botón Detener copias de seguridad" + }, + "backupsConfirmTitle": { + "message": "Por favor, vuelve a confirmar el acceso a tu carpeta de copias de seguridad local de MyTechPassport", + "description": "Título de confirmación de copias de seguridad" + }, + "backupsConfirmDescription": { + "message": "Lo lamentamos, pero necesitamos tu permiso una vez más para seguir haciendo copias locales de tus grabaciones. Desafortunadamente, necesitaremos preguntar cada vez que cierres esta pestaña, lo que puede suceder si cierras el navegador o reinicias tu computadora.", + "description": "Descripción de confirmación de copias de seguridad" + }, + "backupsConfirmAllow": { + "message": "Permitir a MyTechPassport seguir respaldando grabaciones", + "description": "Botón Permitir en la confirmación de copias de seguridad" + }, + "backupsToggle": { + "message": "Hacer copias de seguridad de las grabaciones", + "description": "Etiqueta de alternar copias de seguridad" + }, + "backupPermissionFailTitle": { + "message": "Permiso no otorgado para hacer una copia de seguridad la grabación", + "description": "Título de falla de permiso de respaldo" + }, + "backupPermissionFailDescription": { + "message": "No seleccionaste una carpeta para hacer una copia local de tus grabaciones. Dependiendo de la versión de tu navegador o sistema operativo, es posible que se te solicite seleccionar la carpeta cada vez que comiences a grabar. Puedes intentarlo de nuevo o desactivar las copias de seguridad por completo si prefieres no dar permisos repetidamente.", + "description": "Descripción de falla de permiso de respaldo" + }, + "recordAudioWarningMacTitle": { + "message": "Grabar audio de la computadora", + "description": "Título de advertencia de audio para macOS" + }, + "recordAudioWarningMacDescription": { + "message": "En macOS, solo puedes grabar audio de pestañas. Selecciona la opción 'Pestaña de Chrome' y asegúrate de que 'Compartir también el audio de la pestaña' esté habilitado.", + "description": "Descripción de advertencia de audio para macOS" + }, + "recordAudioWarningOtherTitle": { + "message": "Grabar audio de la computadora", + "description": "Título de advertencia de audio para otros sistemas" + }, + "recordAudioWarningOtherDescription": { + "message": "Asegúrate de activar la opción 'Compartir audio del sistema' si deseas grabar audio de la computadora. Si no ves esta opción, intenta actualizar Chrome o cambia a la opción de grabación de pestañas.", + "description": "Descripción de advertencia de audio para otros sistemas" + }, + + "maxResolutionLabel": { + "message": "Resolución máxima", + "description": "Etiqueta de resolución máxima en el menú de configuración" + }, + "maxFPSLabel": { + "message": "FPS máximos", + "description": "Etiqueta de FPS máximos en el menú de configuración" + }, + + "notEnoughRAM": { + "message": "No hay suficiente RAM", + "description": "Etiqueta de 'No hay suficiente RAM' en el menú de configuración" + }, + "resizeWindowLabel": { + "message": "Redimensionar ventana", + "description": "Etiqueta de redimensionar ventana en el menú de configuración" + }, + "screenTooSmallTooltip": { + "message": "La pantalla es demasiado pequeña para esta resolución", + "description": "Consejo para pantallas demasiado pequeñas en el menú de configuración" + }, + "maxResolutionTooltip": { + "message": "No es posible grabar en esta resolución en su dispositivo", + "description": "Consejo para resolución máxima en el menú de configuración" + }, + "permissionsModalReview": { + "message": "Revisar permisos", + "description": "Botón de revisar permisos" + } +} diff --git a/build/_locales/fr/messages.json b/build/_locales/fr/messages.json new file mode 100644 index 0000000..d9e577e --- /dev/null +++ b/build/_locales/fr/messages.json @@ -0,0 +1,1041 @@ +{ + "extName": { + "message": "MyTechPassport - Capture & Annotation d'écran", + "description": "Nom de l'extension" + }, + "extDesc": { + "message": "La meilleure enregistreuse d'écran gratuite pour Chrome, sans limites. Capturez, dessinez, zoomez, floutez, éditez des vidéos et bien plus encore, sans besoin d'inscription et totalement privée.", + "description": "Description de l'extension" + }, + "recordTab": { + "message": "Enregistrer", + "description": "Étiquette de l'onglet Enregistrer dans le menu déroulant" + }, + "videosTab": { + "message": "Vos vidéos", + "description": "Étiquette de l'onglet Vos vidéos dans le menu déroulant" + }, + "screenType": { + "message": "Écran", + "description": "Étiquette du type d'enregistrement d'écran dans le menu déroulant" + }, + "tabType": { + "message": "Zone", + "description": "Étiquette du type d'enregistrement de zone d'onglet dans le menu déroulant" + }, + "cameraType": { + "message": "Caméra", + "description": "Étiquette du type d'enregistrement de caméra dans le menu déroulant" + }, + "mockupType": { + "message": "Mockup", + "description": "Étiquette du type d'enregistrement de maquette dans le menu déroulant" + }, + "customAreaRecordingDisabledTitle": { + "message": "Enregistrement de zone personnalisée désactivé", + "description": "Titre de l'avis d'enregistrement de zone personnalisée désactivé dans les versions de Chrome antérieures à la 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Mettez à jour Chrome vers la version 110+", + "description": "Description de l'avis d'enregistrement de zone personnalisée désactivé dans les versions de Chrome antérieures à la 104" + }, + "customAreaRecordingDisabledAction": { + "message": "Mettre à jour", + "description": "Action de l'avis d'enregistrement de zone personnalisée désactivé dans les versions de Chrome antérieures à la 104" + }, + "permissionsModalTitle": { + "message": "Vérifiez vos autorisations", + "description": "Titre de la fenêtre modale d'avertissement des autorisations de la caméra/du microphone" + }, + "permissionsModalDescription": { + "message": "Il semble que MyTechPassportsport ne puisse pas accéder à votre caméra ou à votre microphone. Autorisez l'accès en cliquant sur l'icône de la caméra dans la barre d'adresse.", + "description": "Description de la fenêtre modale d'avertissement des autorisations de la caméra/du microphone" + }, + "permissionsModalDismiss": { + "message": "Rejeter", + "description": "Bouton de rejet de la fenêtre modale d'avertissement des autorisations de la caméra/du microphone" + }, + "allowCameraAccessButton": { + "message": "Autoriser l'accès à la caméra", + "description": "Bouton d'autorisation d'accès à la caméra" + }, + "allowMicrophoneAccessButton": { + "message": "Autoriser l'accès au microphone", + "description": "Bouton d'autorisation d'accès au microphone" + }, + "pushToTalkLabel": { + "message": "Appuyer pour parler", + "description": "Étiquette du commutateur Appuyer pour parler" + }, + "customAreaLabel": { + "message": "Définir une zone d'enregistrement", + "description": "Étiquette du commutateur de zone personnalisée" + }, + "flipCameraLabel": { + "message": "Retourner la caméra", + "description": "Étiquette du commutateur Retourner la caméra" + }, + "backgroundEffectsLabel": { + "message": "Effets de fond", + "description": "Étiquette du commutateur Effets de fond" + }, + "recordButtonLabel": { + "message": "Démarrer l'enregistrement", + "description": "Étiquette du bouton d'enregistrement" + }, + "recordButtonNoCameraLabel": { + "message": "Sélectionnez une caméra pour enregistrer", + "description": "Étiquette du bouton d'enregistrement en mode caméra lorsque aucune caméra n'est sélectionnée" + }, + "recordButtonInProgressLabel": { + "message": "Démarrage de l'enregistrement...", + "description": "Étiquette du bouton d'enregistrement en cours" + }, + "showMoreOptionsLabel": { + "message": "Afficher plus d'options", + "description": "Étiquette Afficher plus d'options" + }, + + "systemAudioLabel": { + "message": "Inclure l'audio système", + "description": "Étiquette de l'audio système/onglet" + }, + "hideToolbarLabel": { + "message": "Masquer la barre d'outils", + "description": "Étiquette Masquer la barre d'outils" + }, + "countdownLabel": { + "message": "Compte à rebours", + "description": "Étiquette du compte à rebours" + }, + "alarmLabel": { + "message": "Définir la limite de temps", + "description": "Étiquette de l'alarme" + }, + "blurTypeLabel": { + "message": "Flou", + "description": "Étiquette du type de flou de l'arrière-plan" + }, + "noneDropdownLabel": { + "message": "Aucun", + "description": "Aucun appareil sélectionné" + }, + "noCameraDropdownLabel": { + "message": "Pas de caméra", + "description": "Aucune caméra sélectionnée" + }, + "noMicrophoneDropdownLabel": { + "message": "Pas de microphone", + "description": "Aucun microphone sélectionné" + }, + "selectSourceDropdownPlaceholder": { + "message": "Sélectionner une source", + "description": "Marque de sélection de la source" + }, + "offLabel": { + "message": "Off", + "description": "Étiquette d'extinction dans le menu déroulant" + }, + "regionWidthLabel": { + "message": "Largeur", + "description": "Étiquette de largeur de la région" + }, + "regionHeightLabel": { + "message": "Hauteur", + "description": "Étiquette de hauteur de la région" + }, + "addImageToastTitle": { + "message": "Cliquez pour placer l'image", + "description": "Message d'alerte lors de l'ajout d'une nouvelle image" + }, + "finishRecordingTooltip": { + "message": "Terminer l'enregistrement", + "description": "Conseil pour terminer l'enregistrement" + }, + "restartRecordingTooltip": { + "message": "Redémarrer l'enregistrement", + "description": "Conseil pour redémarrer l'enregistrement" + }, + "pauseRecordingTooltip": { + "message": "Mettre en pause l'enregistrement", + "description": "Conseil pour mettre en pause l'enregistrement" + }, + "resumeRecordingTooltip": { + "message": "Reprendre l'enregistrement", + "description": "Conseil pour reprendre l'enregistrement" + }, + "cancelRecordingTooltip": { + "message": "Annuler l'enregistrement", + "description": "Conseil pour annuler l'enregistrement" + }, + "toggleDrawingToolsTooltip": { + "message": "Outils de dessin", + "description": "Conseil pour basculer les outils de dessin" + }, + "toggleBlurToolTooltip": { + "message": "Outil de flou", + "description": "Conseil pour basculer les outils de flou" + }, + "toggleCursorOptionsTooltip": { + "message": "Options de curseur", + "description": "Conseil pour basculer les options de curseur" + }, + "disableCameraTooltip": { + "message": "Désactiver la caméra", + "description": "Conseil pour désactiver la caméra" + }, + "enableCameraTooltip": { + "message": "Activer la caméra", + "description": "Conseil pour activer la caméra" + }, + "noCameraPermissionsTooltip": { + "message": "Pas de permissions de caméra", + "description": "Conseil pour aucune permission de caméra" + }, + "disableMicrophoneTooltip": { + "message": "Désactiver le microphone", + "description": "Conseil pour désactiver le microphone" + }, + "enableMicrophoneTooltip": { + "message": "Activer le microphone", + "description": "Conseil pour activer le microphone" + }, + "noMicrophonePermissionsTooltip": { + "message": "Pas de permissions de microphone", + "description": "Conseil pour aucune permission de microphone" + }, + "selectToolTooltip": { + "message": "Outil de sélection", + "description": "Conseil pour sélectionner l'outil" + }, + "penToolTooltip": { + "message": "Stylo", + "description": "Conseil pour l'outil de stylo" + }, + "highlighterToolTooltip": { + "message": "Marqueur", + "description": "Conseil pour l'outil de surligneur" + }, + "eraserToolTooltip": { + "message": "Effaceur", + "description": "Conseil pour l'outil d'effaceur" + }, + "textToolTooltip": { + "message": "Texte", + "description": "Conseil pour l'outil de texte" + }, + "shapeToolTooltip": { + "message": "Formes", + "description": "Conseil pour l'outil de formes" + }, + "arrowToolTooltip": { + "message": "Flèche", + "description": "Conseil pour l'outil de flèche" + }, + "imageToolTooltip": { + "message": "Images", + "description": "Conseil pour l'outil d'image" + }, + "undoTooltip": { + "message": "Annuler", + "description": "Conseil pour annuler" + }, + "redoTooltip": { + "message": "Refaire", + "description": "Conseil pour refaire" + }, + "clearCanvasTooltip": { + "message": "Effacer la toile", + "description": "Conseil pour effacer la toile" + }, + "moreColorsTooltip": { + "message": "Plus de couleurs", + "description": "Conseil pour plus de couleurs" + }, + "thickStrokeTooltip": { + "message": "Trait épais", + "description": "Conseil pour un trait épais" + }, + "mediumStrokeTooltip": { + "message": "Trait moyen", + "description": "Conseil pour un trait moyen" + }, + "thinStrokeTooltip": { + "message": "Trait fin", + "description": "Conseil pour un trait fin" + }, + "togglePictureinPictureModeTooltip": { + "message": "Mode Image dans l'image (PIP)", + "description": "Conseil pour basculer le mode image dans l'image" + }, + "toggleFillTooltip": { + "message": "Activer le remplissage", + "description": "Conseil pour basculer le remplissage" + }, + "drawingModeToast": { + "message": "Mode de dessin", + "description": "Message d'alerte du mode de dessin" + }, + "blurModeToast": { + "message": "Mode de flou", + "description": "Message d'alerte du mode de flou" + }, + "clearBlurredElementsTooltip": { + "message": "Effacer tous les éléments flous", + "description": "Conseil pour effacer tous les éléments flous" + }, + "highlightClicksTooltip": { + "message": "Surligner les clics", + "description": "Conseil pour surligner les clics" + }, + "highlightCursorTooltip": { + "message": "Surligner le curseur", + "description": "Conseil pour surligner le curseur" + }, + "spotlightCursorTooltip": { + "message": "Projecteur sur le curseur", + "description": "Conseil pour mettre en lumière le curseur" + }, + "permissionsModalNoShowAgain": { + "message": "Ne plus afficher", + "description": "Bouton de ne plus afficher du modal d'avertissement de permissions" + }, + "restartModalTitle": { + "message": "Êtes-vous sûr de vouloir redémarrer l'enregistrement ?", + "description": "Titre du modal de redémarrage d'enregistrement" + }, + "restartModalDescription": { + "message": "Tout votre progrès sera perdu.", + "description": "Description du modal de redémarrage d'enregistrement" + }, + "restartModalRestart": { + "message": "Redémarrer l'enregistrement", + "description": "Bouton de redémarrage d'enregistrement dans le modal" + }, + "restartModalResume": { + "message": "Reprendre l'enregistrement", + "description": "Bouton de reprise d'enregistrement dans le modal" + }, + "discardModalTitle": { + "message": "Êtes-vous sûr de vouloir abandonner l'enregistrement ?", + "description": "Titre du modal d'abandon d'enregistrement" + }, + "discardModalDescription": { + "message": "Tout votre progrès sera perdu.", + "description": "Description du modal d'abandon d'enregistrement" + }, + "discardModalDiscard": { + "message": "Abandonner l'enregistrement", + "description": "Bouton d'abandon d'enregistrement dans le modal" + }, + "discardModalResume": { + "message": "Reprendre l'enregistrement", + "description": "Bouton de reprise d'enregistrement dans le modal" + }, + "recorderSelectTitle": { + "message": "Choisissez ce que vous voulez enregistrer", + "description": "Titre sur la page d'enregistrement" + }, + "recorderSelectProgressTitle": { + "message": "Enregistrement en cours...", + "description": "Titre sur la page d'enregistrement pendant l'enregistrement en cours" + }, + "recorderSelectDescription": { + "message": "Laissez cet onglet ouvert. Il se fermera une fois votre enregistrement sauvegardé.", + "description": "Description sur la page d'enregistrement" + }, + "sandboxProgressTitle": { + "message": "Préparation de l'enregistrement...", + "description": "Titre sur la page de test pendant l'enregistrement/sauvegarde" + }, + "sandboxProgressDescription": { + "message": "Laissez cet onglet ouvert. Il se mettra à jour avec votre enregistrement une fois prêt.", + "description": "Description sur la page de test pendant l'enregistrement/sauvegarde" + }, + "sandboxEditorMainTitle": { + "message": "Éditeur", + "description": "Titre dans la navigation de la page de l'éditeur de test" + }, + "sandboxEditorCancelButton": { + "message": "Annuler", + "description": "Bouton d'annulation sur la page de l'éditeur de test" + }, + "sandboxEditorRevertButton": { + "message": "Revenir à l'original", + "description": "Bouton de retour à l'original sur la page de l'éditeur de test" + }, + "sandboxEditorResetButton": { + "message": "Réinitialiser", + "description": "Bouton de réinitialisation sur la page de l'éditeur de test" + }, + "sandboxEditorSaveButton": { + "message": "Enregistrer les modifications", + "description": "Bouton d'enregistrement sur la page de l'éditeur de test" + }, + "sandboxEditorSaveProgressButton": { + "message": "Enregistrement en cours...", + "description": "Bouton d'enregistrement sur la page de l'éditeur de test pendant l'enregistrement en cours" + }, + "sandboxAudioDragAndDrop": { + "message": "Faites glisser votre fichier audio ici", + "description": "Faites glisser et déposez un fichier audio sur la page de l'éditeur de test" + }, + "sandboxAudioOrBrowse": { + "message": "Ou cliquez pour parcourir", + "description": "Ou cliquez pour parcourir un fichier audio sur la page de l'éditeur de test" + }, + "sandboxAudioSettingsTitle": { + "message": "Paramètres audio", + "description": "Titre des paramètres audio sur la page de l'éditeur de test" + }, + "sandboxAudioVolumeLabel": { + "message": "Volume", + "description": "Étiquette de volume audio sur la page de l'éditeur de test" + }, + "sandboxAudioUpdateButton": { + "message": "Appliquer", + "description": "Bouton de mise à jour audio sur la page de l'éditeur de tests" + }, + "sandboxCropTitle": { + "message": "Recadrer", + "description": "Titre de recadrage sur la page de l'éditeur de tests" + }, + "widthLabel": { + "message": "Largeur", + "description": "Étiquette de largeur pour les propriétés" + }, + "heightLabel": { + "message": "Hauteur", + "description": "Étiquette de hauteur pour les propriétés" + }, + "leftLabel": { + "message": "Gauche", + "description": "Étiquette de gauche pour les propriétés" + }, + "topLabel": { + "message": "Haut", + "description": "Étiquette de haut pour les propriétés" + }, + "sandboxEditorTrimInfo": { + "message": "Faites glisser les poignées et utilisez les boutons à gauche pour éditer la section sélectionnée.", + "description": "Informations sur le recadrage dans l'éditeur de tests" + }, + "sandboxEditorTrimButton": { + "message": "Recadrer la vidéo", + "description": "Bouton de recadrage dans l'éditeur de tests" + }, + "sandboxEditorTrimProgressButton": { + "message": "En cours de recadrage...", + "description": "Bouton de recadrage dans l'éditeur de tests pendant le recadrage" + }, + "sandboxEditorCutButton": { + "message": "Supprimer la section", + "description": "Bouton de suppression dans l'éditeur de tests" + }, + "sandboxEditorCutProgressButton": { + "message": "En cours de suppression...", + "description": "Bouton de suppression dans l'éditeur de tests pendant la suppression" + }, + "sandboxEditorMuteButton": { + "message": "Couper le son", + "description": "Bouton de mise en sourdine dans l'éditeur de tests" + }, + "sandboxEditorMuteProgressButton": { + "message": "En cours de mise en sourdine...", + "description": "Bouton de mise en sourdine dans l'éditeur de tests pendant la mise en sourdine" + }, + "learnMoreDot": { + "message": "En savoir plus.", + "description": "En savoir plus avec un point" + }, + "undoLabel": { + "message": "Annuler", + "description": "Étiquette d'annulation" + }, + "redoLabel": { + "message": "Rétablir", + "description": "Étiquette de rétablissement" + }, + "leaveReview": { + "message": "Laisser un avis", + "description": "Bouton de laisser un avis" + }, + "followForUpdates": { + "message": "Restez informé", + "description": "Bouton de suivi pour les mises à jour" + }, + "offlineLabelTitle": { + "message": "Hors ligne", + "description": "Étiquette hors ligne" + }, + "offlineLabelDescription": { + "message": "Certaines fonctions ne sont pas disponibles", + "description": "Description de l'étiquette hors ligne" + }, + "offlineLabelTryAgain": { + "message": "Réessayer", + "description": "Bouton de réessai de l'étiquette hors ligne" + }, + "updateChromeLabelTitle": { + "message": "Chrome a besoin d'une mise à jour", + "description": "Étiquette de mise à jour de Chrome" + }, + "updateChromeLabelDescription": { + "message": "Mettez à jour pour accéder à plus de fonctionnalités", + "description": "Description de l'étiquette de mise à jour de Chrome" + }, + "learnMoreLabel": { + "message": "En savoir plus", + "description": "Bouton d'en savoir plus" + }, + "overLimitLabelTitle": { + "message": "Vidéo trop longue pour être traitée localement", + "description": "Étiquette de limite de plus de 5 minutes dans l'éditeur" + }, + "overLimitLabelDescription": { + "message": "L'édition et l'exportation au format MP4 ne sont pas disponibles", + "description": "Description de la limite de plus de 5 minutes dans l'éditeur" + }, + "videoProcessingLabelTitle": { + "message": "La vidéo est en cours de traitement...", + "description": "Étiquette de traitement vidéo dans l'éditeur" + }, + "videoProcessingLabelDescription": { + "message": "Abonnez-vous pour éditer les vidéos plus rapidement", + "description": "Description du traitement vidéo dans l'éditeur" + }, + "sandboxEditTitle": { + "message": "Modifier", + "description": "Titre de modification sur la page de l'éditeur de tests" + }, + "noConnectionLabel": { + "message": "Pas de connexion", + "description": "Étiquette pas de connexion" + }, + "notAvailableLabel": { + "message": "Non disponible", + "description": "Étiquette non disponible" + }, + "editButtonTitle": { + "message": "Modifier la vidéo", + "description": "Étiquette de bouton de recadrage" + }, + "editButtonDescription": { + "message": "Recadrez ou mettez en sourdine la vidéo", + "description": "Étiquette de recadrage" + }, + "preparingLabel": { + "message": "Préparation de la vidéo, veuillez patienter...", + "description": "Étiquette de préparation" + }, + "cropButtonTitle": { + "message": "Recadrer", + "description": "Étiquette de bouton de recadrage" + }, + "cropButtonDescription": { + "message": "Recadrez et redimensionnez la vidéo", + "description": "Étiquette de recadrage" + }, + "addAudioButtonTitle": { + "message": "Ajouter de l'audio", + "description": "Étiquette de bouton d'ajout d'audio" + }, + "addAudioButtonDescription": { + "message": "Téléchargez votre propre audio", + "description": "Étiquette d'ajout d'audio" + }, + "sandboxSaveTitle": { + "message": "Intégrations", + "description": "Titre de sauvegarde sur la page de l'éditeur de tests" + }, + "signOutDriveLabel": { + "message": "Déconnexion de Google Drive", + "description": "Étiquette de déconnexion de Google Drive" + }, + "savingDriveLabel": { + "message": "Enregistrement...", + "description": "Étiquette d'enregistrement sur Google Drive" + }, + "saveDriveButtonTitle": { + "message": "Enregistrer sur Drive", + "description": "Bouton d'enregistrement sur Google Drive" + }, + "saveDriveButtonDescription": { + "message": "Enregistrez la vidéo sur Google Drive", + "description": "Étiquette d'enregistrement sur Google Drive" + }, + "signInDriveLabel": { + "message": "Connectez-vous et enregistrez sur Drive", + "description": "Étiquette de connexion à Google Drive" + }, + "sandboxExportTitle": { + "message": "Exporter", + "description": "Titre d'exportation sur la page de l'éditeur de tests" + }, + "downloadingLabel": { + "message": "Téléchargement...", + "description": "Étiquette de téléchargement" + }, + "downloadWEBMButtonTitle": { + "message": "Télécharger en tant que .webm", + "description": "Bouton de téléchargement WEBM" + }, + "downloadWEBMButtonDescription": { + "message": "Exportez une vidéo .webm", + "description": "Étiquette de téléchargement WEBM" + }, + "downloadMP4ButtonTitle": { + "message": "Télécharger en tant que .mp4", + "description": "Bouton de téléchargement MP4" + }, + "downloadMP4ButtonDescription": { + "message": "Exportez une vidéo .mp4 (recommandé)", + "description": "Étiquette de téléchargement MP4" + }, + "downloadGIFButtonTitle": { + "message": "Télécharger en tant que .gif", + "description": "Bouton de téléchargement GIF" + }, + "downloadGIFButtonDescription": { + "message": "Exportez un GIF (maximum 30 secondes)", + "description": "Étiquette de téléchargement GIF" + }, + "shareModalSandboxTitle": { + "message": "Partagez vos vidéos avec un lien", + "description": "Titre de la boîte de dialogue de partage sur la page de l'éditeur de tests" + }, + "shareModalSandboxDescription": { + "message": "À venir ! Laissez votre adresse e-mail pour rester informé et recevoir des notifications lorsqu'il sera disponible.", + "description": "Description de la boîte de dialogue de partage sur la page de l'éditeur de tests" + }, + "shareModalSandboxButton": { + "message": "Rejoignez la liste d'attente", + "description": "Espace réservé pour l'e-mail dans la boîte de dialogue de partage sur la page de l'éditeur de tests" + }, + "shareSandboxButton": { + "message": "Partager la vidéo", + "description": "Bouton de partage sur la page de l'éditeur de tests" + }, + "replaceAudioEditor": { + "message": "Remplacer l'audio existant", + "description": "Bouton de remplacement audio dans l'éditeur" + }, + "zoomToPointPopup": { + "message": "Zoom sur le curseur", + "description": "Fenêtre contextuelle de zoom sur le point" + }, + "stayInPagePopup": { + "message": "Restez sur la page lors de l'enregistrement", + "description": "Fenêtre contextuelle de rester sur la page" + }, + "micReminderPopup": { + "message": "Avertissement si le microphone est off", + "description": "Fenêtre contextuelle de rappel de microphone" + }, + "helpPopup": { + "message": "Aide", + "description": "Bouton de fenêtre contextuelle d'aide" + }, + "pausedRecordingToast": { + "message": "Enregistrement en pause. Appuyez sur le bouton de lecture pour continuer.", + "description": "Titre de la boîte de dialogue d'enregistrement en pause" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport n'a pas la permission d'enregistrer votre écran", + "description": "Titre de la boîte de dialogue des autorisations" + }, + "chromePermissionsModalDescription": { + "message": "Pour activer l'enregistrement de l'écran, vous devez accorder des autorisations à MyTechPassport.", + "description": "Description de la boîte de dialogue des autorisations" + }, + "chromePermissionsModalAction": { + "message": "Activer l'enregistrement de l'écran", + "description": "Action de la boîte de dialogue des autorisations" + }, + "chromePermissionsModalCancel": { + "message": "Annuler", + "description": "Annuler la boîte de dialogue des autorisations" + }, + "micMutedModalTitle": { + "message": "Votre microphone est désactivé", + "description": "Titre de la boîte de dialogue du microphone désactivé" + }, + "micMutedModalDescription": { + "message": "Pour inclure l'audio dans votre enregistrement, vous devez activer votre microphone. Voulez-vous continuer sans audio ?", + "description": "Description de la boîte de dialogue du microphone désactivé" + }, + "micMutedModalAction": { + "message": "Oui, continuer", + "description": "Continuer la boîte de dialogue du microphone désactivé" + }, + "micMutedModalCancel": { + "message": "Annuler", + "description": "Annuler la boîte de dialogue du microphone désactivé" + }, + "setupTitle": { + "message": "Commencez à utiliser MyTechPassport en trois étapes simples :", + "description": "Titre des étapes de configuration" + }, + "setupStep1Before": { + "message": "1- Cliquez sur l'icône ", + "description": "Étape 1 de configuration, avant l'icône. Besoin d'un espace à la fin." + }, + "setupStep1After": { + "message": " des extensions", + "description": "Étape 1 de configuration, après l'icône. Besoin d'un espace au début." + }, + "setupStep2Before": { + "message": "2- Appuyez sur l'icône ", + "description": "Étape 2 de configuration, avant l'icône. Besoin d'un espace à la fin." + }, + "setupStep2After": { + "message": " de broche", + "description": "Étape 2 de configuration, après l'icône. Besoin d'un espace au début." + }, + "setupStep3Before": { + "message": "3- Cliquez sur l'icône ", + "description": "Étape 3 de configuration, avant l'icône. Besoin d'un espace à la fin." + }, + "setupStep3After": { + "message": " de MyTechPassport pour commencer", + "description": "Étape 3 de configuration, après l'icône. Besoin d'un espace au début." + }, + "setupCompleteTitle": { + "message": "Super ! Vous êtes prêt", + "description": "Titre de la configuration terminée" + }, + "setupCompleteDescription": { + "message": "Vous pouvez maintenant commencer à enregistrer ici ou dans n'importe quel autre onglet.", + "description": "Description de la configuration terminée" + }, + "clickHereDrawOnboarding": { + "message": "Cliquez ici pour dessiner", + "description": "Instructions pour cliquer ici" + }, + "countdownMessage": { + "message": "Détendez-vous. Cliquez n'importe où pour arrêter le compte à rebours.", + "description": "Message de compte à rebours" + }, + "sandboxEditorTooSmallInfo": { + "message": "L'édition de la vidéo peut être imprécise en raison des intervalles entre les images avec des durées courtes.", + "description": "Information sur l'éditeur trop petit" + }, + "processingBannerEditor": { + "message": "La vidéo est en cours de traitement, la lecture peut être imprécise ou interrompue.", + "description": "Bannière de traitement dans l'éditeur" + }, + "croppingInfoTitle": { + "message": "Le recadrage de la vidéo peut prendre un certain temps", + "description": "Titre de l'information de recadrage" + }, + "croppingInfoDescription": { + "message": "Abonnez-vous pour éditer les vidéos plus rapidement", + "description": "Description de l'information de recadrage" + }, + "micOnToast": { + "message": "Microphone activé", + "description": "Titre de l'alerte microphone activé" + }, + "micOffToast": { + "message": "Microphone désactivé", + "description": "Titre de l'alerte microphone désactivé" + }, + "hideUIAlerts": { + "message": "Masquer les notifications de l'interface", + "description": "Bouton pour masquer les alertes de l'interface" + }, + "noShowAgain": { + "message": "Ne pas afficher à nouveau", + "description": "Bouton Ne pas afficher à nouveau" + }, + "toolbarHoverOnly": { + "message": "Masquer la barre d'outils lorsque non utilisée", + "description": "Bouton pour afficher la barre d'outils uniquement au survol" + }, + "stopRecording": { + "message": "Arrêter l'enregistrement", + "description": "Stop recording button in recording screen" + }, + "updateAnnouncementTitle": { + "message": "Bienvenue dans le nouveau MyTechPassport !", + "description": "Titre de l'annonce de mise à jour pour les utilisateurs existants" + }, + "updateAnnouncementDescription": { + "message": "Nous avons mis à jour le design et ajouté de nouvelles fonctionnalités, mais ne vous inquiétez pas, c'est toujours la même extension gratuite, privée et open source que vous connaissez et aimez.", + "description": "Description de l'annonce de mise à jour pour les utilisateurs existants" + }, + "updateAnnouncementLearnMore": { + "message": "En savoir plus sur la mise à jour.", + "description": "Lien 'En savoir plus' de l'annonce de mise à jour pour les utilisateurs existants" + }, + "updateAnnouncementButton": { + "message": "Commencer", + "description": "Bouton de l'annonce de mise à jour pour les utilisateurs existants" + }, + "streamErrorModalTitle": { + "message": "Erreur lors du démarrage de l'enregistrement", + "description": "Titre du modal d'erreur de flux" + }, + "streamErrorModalDescription": { + "message": "Il semble y avoir une erreur lors du démarrage de l'enregistrement. Redémarrez votre navigateur et réessayez. Si le problème persiste, veuillez nous contacter à l'adresse support@MyTechPassport.io.", + "description": "Description du modal d'erreur de flux" + }, + "highestQuality": { + "message": "Meilleure qualité", + "description": "Étiquette pour basculer vers la meilleure qualité dans la fenêtre contextuelle" + }, + "restoreRecording": { + "message": "Restaurer l'enregistrement précédent", + "description": "Bouton pour restaurer l'enregistrement précédent dans la fenêtre contextuelle" + }, + "havingIssuesButton": { + "message": "Vous rencontrez des problèmes ?", + "description": "Bouton de signalement de problèmes dans l'éditeur" + }, + "havingIssuesModalTitle": { + "message": "Vous ne pouvez pas voir votre enregistrement ?", + "description": "Titre de la fenêtre modale de signalement de problèmes dans l'éditeur" + }, + "havingIssuesModalDescription": { + "message": "Si vous avez terminé votre enregistrement et que vous vous trouvez sur cette page sans voir votre vidéo, vous pouvez essayer de télécharger les données brutes de la vidéo si elles sont disponibles. Vous pouvez également nous contacter et soumettre un rapport de bug.", + "description": "Description de la fenêtre modale de signalement de problèmes dans l'éditeur" + }, + "havingIssuesModalButton": { + "message": "Télécharger les données brutes de la vidéo", + "description": "Bouton de téléchargement dans la fenêtre modale de signalement de problèmes dans l'éditeur" + }, + "havingIssuesModalButton2": { + "message": "Signaler un bug", + "description": "Deuxième bouton dans la fenêtre modale de signalement de problèmes dans l'éditeur" + }, + "noRecordingFound": { + "message": "Aucun enregistrement trouvé, désolé :(", + "description": "Message d'alerte en cas d'absence d'enregistrement dans l'éditeur" + }, + "memoryLimitTitle": { + "message": "Limite de mémoire atteinte", + "description": "Titre de la limite de mémoire atteinte" + }, + "memoryLimitDescription": { + "message": "Votre appareil a épuisé sa mémoire disponible pour l'enregistrement, ce qui a entraîné l'arrêt automatique de l'enregistrement. Si vous souhaitez enregistrer plus longtemps, vous pouvez essayer de réduire la qualité de la vidéo ou de libérer de l'espace sur votre appareil.", + "description": "Description de la limite de mémoire atteinte" + }, + "understoodButton": { + "message": "Compris", + "description": "Bouton Compris" + }, + "notEnoughSpaceTitle": { + "message": "Espace insuffisant", + "description": "Titre d'espace insuffisant" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassport nécessite au moins 1 Go d'espace libre pour l'enregistrement. Veuillez libérer de l'espace et réessayer.", + "description": "Description d'espace insuffisant" + }, + "clearSpaceButton": { + "message": "Effacer les enregistrements précédents", + "description": "Bouton Effacer les enregistrements précédents" + }, + "sandboxAdvancedTitle": { + "message": "Avancé", + "description": "Section avancée dans la page de l'éditeur en mode sécurisé" + }, + "rawRecordingButtonTitle": { + "message": "Télécharger le fichier vidéo brut", + "description": "Bouton de téléchargement de l'enregistrement brut" + }, + "rawRecordingButtonDescription": { + "message": "Exporter les données d'enregistrement originales", + "description": "Libellé du bouton de téléchargement de l'enregistrement brut" + }, + "troubleshootButtonTitle": { + "message": "Obtenir de l'aide pour votre enregistrement", + "description": "Bouton de dépannage" + }, + "troubleShootButtonDescription": { + "message": "Récupérez votre vidéo et résolvez d'autres problèmes", + "description": "Libellé de dépannage" + }, + "rawRecordingModalTitle": { + "message": "Télécharger le fichier vidéo brut", + "description": "Titre de la fenêtre modale de l'enregistrement brut" + }, + "rawRecordingModalDescription": { + "message": "Le fichier vidéo brut est le fichier original enregistré par MyTechPassport. Cette vidéo n'a pas été traitée ni modifiée, elle peut donc être très volumineuse et peut ne pas être lisible sur tous les appareils. Si vous rencontrez des problèmes avec la vidéo traitée, vous pouvez utiliser ce fichier pour récupérer votre vidéo.", + "description": "Description de la fenêtre modale de l'enregistrement brut" + }, + "rawRecordingModalButton": { + "message": "Télécharger", + "description": "Bouton de la fenêtre modale de l'enregistrement brut" + }, + "troubleshootModalTitle": { + "message": "Télécharger les informations système et les données vidéo pour le dépannage", + "description": "Titre de la fenêtre modale de dépannage" + }, + "troubleshootModalDescription": { + "message": "Après le téléchargement, envoyez le fichier à support@MyTechPassport.io avec toutes les informations pertinentes. Nous utiliserons ces données pour vous aider à résoudre tout problème que vous pourriez rencontrer avec l'extension, et si possible, récupérer votre vidéo.", + "description": "Description de la fenêtre modale de dépannage" + }, + "troubleshootModalButton": { + "message": "Télécharger", + "description": "Bouton de la fenêtre modale de dépannage" + }, + "overLimitModalTitle": { + "message": "La vidéo est trop longue pour être traitée sur votre appareil", + "description": "Titre de la fenêtre modale de limite de plus de 5 minutes" + }, + "overLimitModalDescription": { + "message": "Comme MyTechPassport est complètement privé et fonctionne en local, il est limité par le matériel de votre appareil. Le traitement d'une vidéo de cette longueur prendrait trop de temps et serait très intensif en ressources. Ne vous inquiétez pas, vous pouvez toujours télécharger le fichier WEBM ou l'enregistrement brut, mais l'édition et l'exportation en MP4 ne sont pas disponibles. Cela dit, vous pouvez toujours essayer de traiter la vidéo de toute façon, si vous comprenez les risques.", + "description": "Description de la fenêtre modale de limite de plus de 5 minutes" + }, + "overLimitModalButton": { + "message": "Je comprends le risque, essayer quand même", + "description": "Bouton de la fenêtre modale de limite de plus de 5 minutes" + }, + "overLimitModalLearnMore": { + "message": "En savoir plus sur le traitement des vidéos longues.", + "description": "Lien 'En savoir plus' de la fenêtre modale de limite de plus de 5 minutes avec un point" + }, + + "recoveryModeTitle": { + "message": "Mode de récupération", + "description": "Titre du mode de récupération" + }, + + "downloadForTroubleshootingOption": { + "message": "Télécharger des données pour résoudre les problèmes", + "description": "Option de téléchargement pour résoudre les problèmes" + }, + "getHelpNav": { + "message": "Centre d'aide", + "description": "Élément de navigation pour obtenir de l'aide" + }, + "audioWarningTitle": { + "message": "Enregistrement audio de l'ordinateur", + "description": "Titre de l'avertissement audio" + }, + "audioWarningDescription": { + "message": "Pour enregistrer l'audio de cette page, vous devez basculer vers '$tab$'.", + "description": "Description de l'avertissement audio", + "placeholders": { + "tab": { + "content": "$1", + "example": "Zone de l'onglet" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Extension non prise en charge sur l'onglet", + "description": "Titre de l'extension non prise en charge sur l'onglet" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport n'était pas pris en charge dans votre onglet précédent. Vous pouvez toujours commencer votre enregistrement ici et basculer vers l'onglet, mais votre caméra et votre barre d'outils ne seront pas visibles.", + "description": "Description de l'extension non prise en charge sur l'onglet" + }, + "backupsTitle": { + "message": "Configurer une sauvegarde locale de vos enregistrements MyTechPassport", + "description": "Titre des sauvegardes" + }, + "backupsDescription1": { + "message": "Conservez une copie de tous les enregistrements que vous effectuez. Si vous ne configurez pas de sauvegardes, vos enregistrements ne seront enregistrés que lorsque vous choisirez de les télécharger.", + "description": "Description des sauvegardes" + }, + "backupsDescription2": { + "message": "Vous devrez peut-être créer un nouveau dossier d'abord si vous essayez de sauvegarder dans Téléchargements ou d'autres dossiers système.", + "description": "Description des sauvegardes" + }, + "backupsSelectFolder": { + "message": "Sélectionner un dossier", + "description": "Bouton Sélectionner un dossier" + }, + "backupsNotNow": { + "message": "Pas maintenant", + "description": "Bouton Pas maintenant" + }, + "backupsOnTitle": { + "message": "Vos enregistrements sont sauvegardés localement", + "description": "Titre de l'activation des sauvegardes" + }, + "backupsOnDescription": { + "message": "Pour éviter de demander des autorisations à chaque enregistrement, nous vous recommandons de laisser cette page ouverte.", + "description": "Description de l'activation des sauvegardes" + }, + "backupsClose": { + "message": "Fermer l'onglet de toute façon", + "description": "Bouton Fermer l'onglet de toute façon" + }, + "backupsStop": { + "message": "Arrêter toutes les sauvegardes des enregistrements", + "description": "Bouton Arrêter les sauvegardes" + }, + "backupsConfirmTitle": { + "message": "Veuillez confirmer à nouveau l'accès à votre dossier de sauvegarde local MyTechPassport", + "description": "Titre de confirmation des sauvegardes" + }, + "backupsConfirmDescription": { + "message": "Nous sommes désolés, mais nous avons besoin de votre permission une fois de plus pour continuer à effectuer des sauvegardes locales de vos enregistrements. Malheureusement, nous devrons demander à chaque fois que vous fermerez cet onglet, ce qui peut arriver si vous fermez le navigateur ou redémarrez votre ordinateur.", + "description": "Description de la confirmation des sauvegardes" + }, + "backupsConfirmAllow": { + "message": "Autoriser MyTechPassport à continuer à effectuer des sauvegardes des enregistrements", + "description": "Bouton Autoriser dans la confirmation des sauvegardes" + }, + "backupsToggle": { + "message": "Activer les sauvegardes des enregistrements", + "description": "Libellé de l'activation des sauvegardes" + }, + "backupPermissionFailTitle": { + "message": "Autorisation non accordée pour sauvegarder l'enregistrement", + "description": "Titre de l'échec de l'autorisation de sauvegarde" + }, + "backupPermissionFailDescription": { + "message": "Vous n'avez pas sélectionné de dossier pour sauvegarder localement vos enregistrements. Selon la version de votre navigateur ou de votre système d'exploitation, il se peut que l'on vous demande de sélectionner le dossier à chaque début d'enregistrement. Vous pouvez réessayer ou désactiver complètement les sauvegardes si vous préférez ne pas donner des autorisations de manière répétée.", + "description": "Description de l'échec de l'autorisation de sauvegarde" + }, + "recordAudioWarningMacTitle": { + "message": "Enregistrement audio de l'ordinateur", + "description": "Titre de l'avertissement audio pour macOS" + }, + "recordAudioWarningMacDescription": { + "message": "Sous macOS, vous ne pouvez enregistrer que l'audio de l'onglet. Sélectionnez l'option 'Onglet Chrome' et assurez-vous que 'Partager également l'audio de l'onglet' est activé.", + "description": "Description de l'avertissement audio pour macOS" + }, + "recordAudioWarningOtherTitle": { + "message": "Enregistrement audio de l'ordinateur", + "description": "Titre de l'avertissement audio pour d'autres systèmes" + }, + "recordAudioWarningOtherDescription": { + "message": "Assurez-vous d'activer l'option 'Partager l'audio du système' si vous souhaitez enregistrer l'audio de l'ordinateur. Si vous ne voyez pas cette option, essayez de mettre à jour Chrome ou basculez vers l'enregistrement de l'onglet.", + "description": "Description de l'avertissement audio pour d'autres systèmes" + }, + + "maxResolutionLabel": { + "message": "Résolution maximale", + "description": "Étiquette de résolution maximale dans le menu des paramètres" + }, + "maxFPSLabel": { + "message": "FPS maximum", + "description": "Étiquette de FPS maximum dans le menu des paramètres" + }, + + "notEnoughRAM": { + "message": "Pas assez de RAM", + "description": "Étiquette 'Pas assez de RAM' dans le menu des paramètres" + }, + "resizeWindowLabel": { + "message": "Redimensionner la fenêtre", + "description": "Étiquette de redimensionnement de fenêtre dans le menu des paramètres" + }, + "screenTooSmallTooltip": { + "message": "L'écran est trop petit pour cette résolution", + "description": "Info-bulle indiquant que l'écran est trop petit dans le menu des paramètres" + }, + "maxResolutionTooltip": { + "message": "Impossible d'enregistrer à cette résolution sur votre appareil", + "description": "Info-bulle indiquant qu'il est impossible d'enregistrer à cette résolution dans le menu des paramètres" + }, + "permissionsModalReview": { + "message": "Réviser les autorisations", + "description": "Bouton de révision des autorisations" + } +} diff --git a/build/_locales/hi/messages.json b/build/_locales/hi/messages.json new file mode 100644 index 0000000..ccc689b --- /dev/null +++ b/build/_locales/hi/messages.json @@ -0,0 +1,1041 @@ +{ + "extName": { + "message": "स्क्रीनिटी - स्क्रीन रिकॉर्डिंग & नोट्स", + "description": "एक्सटेंशन का नाम" + }, + "extDesc": { + "message": "सबसे बेहतरीन मुफ्त स्क्रीन रिकॉर्डर बिना किसी सीमा के। छवि कैद करें, टिप्पणी करें, जूम करें, धुंधला करें, वीडियो संपादित करें और और भी - किसी पंजीकरण की आवश्यकता नहीं है, और गोपनीयता का आदरणीय।", + "description": "एक्सटेंशन का विवरण" + }, + "recordTab": { + "message": "रिकॉर्ड", + "description": "पॉपअप पर रिकॉर्ड टैब लेबल" + }, + "videosTab": { + "message": "आपके वीडियो", + "description": "पॉपअप पर वीडियो टैब लेबल" + }, + "screenType": { + "message": "स्क्रीन", + "description": "पॉपअप पर स्क्रीन रिकॉर्डिंग प्रकार लेबल" + }, + "tabType": { + "message": "टैब क्षेत्र", + "description": "पॉपअप पर टैब क्षेत्र रिकॉर्डिंग प्रकार लेबल" + }, + "cameraType": { + "message": "कैमरा", + "description": "पॉपअप पर कैमरा रिकॉर्डिंग प्रकार लेबल" + }, + "mockupType": { + "message": "मॉकअप", + "description": "पॉपअप पर मॉकअप रिकॉर्डिंग प्रकार लेबल" + }, + "customAreaRecordingDisabledTitle": { + "message": "कस्टम क्षेत्र रिकॉर्डिंग अक्षम", + "description": "पॉपअप के लिए 104 से पुराने क्रोम संस्करण के लिए कस्टम क्षेत्र रिकॉर्डिंग अक्षम चेतावनी" + }, + "customAreaRecordingDisabledDescription": { + "message": "क्रोम संस्करण को 110+ पर अपडेट करें", + "description": "क्रोम संस्करण 104 से पुराने के लिए कस्टम क्षेत्र रिकॉर्डिंग अक्षम चेतावनी विवरण" + }, + "customAreaRecordingDisabledAction": { + "message": "अपडेट करें", + "description": "क्रोम संस्करण 104 से पुराने के लिए कस्टम क्षेत्र रिकॉर्डिंग अक्षम चेतावनी क्रिया" + }, + "permissionsModalTitle": { + "message": "अपनी अनुमतियों की जांच करें", + "description": "कैमरा / माइक्रोफ़ोन अनुमतियों की चेतावनी मॉडल शीर्षक" + }, + "permissionsModalDescription": { + "message": "लगता है कि स्क्रीनिटी कैमरा या माइक्रोफ़ोन तक पहुंच नहीं पा रहा है। कृपया पता करें कि कैमरा आइकन पर क्लिक करके पहुंच को अनुमति दें।", + "description": "कैमरा / माइक्रोफ़ोन अनुमतियों की चेतावनी मॉडल विवरण" + }, + "permissionsModalDismiss": { + "message": "रद्द करें", + "description": "कैमरा / माइक्रोफ़ोन अनुमतियों की चेतावनी मॉडल निरस्त करें बटन" + }, + "allowCameraAccessButton": { + "message": "कैमरा अनुमति दें", + "description": "कैमरा अनुमति दें बटन" + }, + "allowMicrophoneAccessButton": { + "message": "माइक्रोफ़ोन अनुमति दें", + "description": "माइक्रोफ़ोन अनुमति दें बटन" + }, + "pushToTalkLabel": { + "message": "बोलने के लिए दबाएं", + "description": "पुश टू टॉक स्विच लेबल" + }, + "customAreaLabel": { + "message": "रिकॉर्ड करने के लिए एक क्षेत्र सेट करें", + "description": "कस्टम क्षेत्र स्विच लेबल" + }, + "flipCameraLabel": { + "message": "कैमरा पलटें", + "description": "कैमरा पलटने का स्विच लेबल" + }, + "backgroundEffectsLabel": { + "message": "पृष्ठभूमि प्रभाव", + "description": "पृष्ठभूमि प्रभाव स्विच लेबल" + }, + "recordButtonLabel": { + "message": "रिकॉर्डिंग शुरू करें", + "description": "रिकॉर्ड बटन लेबल" + }, + "recordButtonInProgressLabel": { + "message": "रिकॉर्डिंग शुरू हो रही है...", + "description": "रिकॉर्ड बटन कार्रवाई में लेबल" + }, + "recordButtonNoCameraLabel": { + "message": "रिकॉर्ड करने के लिए कैमरा सेट करें", + "description": "कैमरा मोड में होते हुए रिकॉर्ड बटन लेबल और कोई कैमरा चयन नहीं किया गया है" + }, + "showMoreOptionsLabel": { + "message": "अधिक विकल्प दिखाएं", + "description": "अधिक विकल्प लेबल" + }, + + "systemAudioLabel": { + "message": "सिस्टम ऑडियो शामिल करें", + "description": "टैब/सिस्टम ऑडियो लेबल" + }, + "hideToolbarLabel": { + "message": "टूलबार छिपाएं", + "description": "टूलबार लेबल" + }, + "countdownLabel": { + "message": "गिनती शुरू करें", + "description": "गिनती लेबल" + }, + "alarmLabel": { + "message": "समय सीमा सेट करें", + "description": "अलार्म लेबल" + }, + "blurTypeLabel": { + "message": "ब्लर", + "description": "पृष्ठभूमि ब्लर लेबल" + }, + "noneDropdownLabel": { + "message": "कोई नहीं", + "description": "कोई डिवाइस चयन नहीं किया गया" + }, + "noCameraDropdownLabel": { + "message": "कैमरा नहीं", + "description": "कोई कैमरा चयन नहीं किया गया" + }, + "noMicrophoneDropdownLabel": { + "message": "माइक्रोफ़ोन नहीं", + "description": "कोई माइक्रोफ़ोन चयन नहीं किया गया" + }, + "selectSourceDropdownPlaceholder": { + "message": "एक स्रोत चुनें", + "description": "स्रोत चुनने का प्लेसहोल्डर" + }, + "offLabel": { + "message": "बंद", + "description": "ड्रॉपडाउन पर बंद लेबल" + }, + "regionWidthLabel": { + "message": "चौड़ाई", + "description": "क्षेत्र चौड़ाई लेबल" + }, + "regionHeightLabel": { + "message": "ऊंचाई", + "description": "क्षेत्र ऊंचाई लेबल" + }, + "addImageToastTitle": { + "message": "छवि डालने के लिए क्लिक करें", + "description": "नई छवि जोड़ते समय टोस्ट" + }, + "finishRecordingTooltip": { + "message": "रिकॉर्डिंग समाप्त करें", + "description": "रिकॉर्डिंग समाप्त करने की टूलटिप" + }, + "restartRecordingTooltip": { + "message": "रिकॉर्डिंग फिर से शुरू करें", + "description": "रिकॉर्डिंग फिर से शुरू करने की टूलटिप" + }, + "pauseRecordingTooltip": { + "message": "रिकॉर्डिंग रोकें", + "description": "रिकॉर्डिंग रोकने की टूलटिप" + }, + "resumeRecordingTooltip": { + "message": "रिकॉर्डिंग फिर से शुरू करें", + "description": "रिकॉर्डिंग टूलटिप फिर से शुरू करें" + }, + "cancelRecordingTooltip": { + "message": "रिकॉर्डिंग रद्द करें", + "description": "रिकॉर्डिंग टूलटिप रद्द करें" + }, + "toggleDrawingToolsTooltip": { + "message": "ड्रॉइंग टूल्स टॉगल करें", + "description": "ड्रॉइंग टूल्स टूलटिप टॉगल करें" + }, + "toggleBlurToolTooltip": { + "message": "ब्लर टूल टॉगल करें", + "description": "ब्लर टूल टूलटिप टॉगल करें" + }, + "toggleCursorOptionsTooltip": { + "message": "कर्सर विकल्प टॉगल करें", + "description": "कर्सर विकल्प टूलटिप टॉगल करें" + }, + "disableCameraTooltip": { + "message": "कैमरा बंद करें", + "description": "कैमरा टूलटिप बंद करें" + }, + "enableCameraTooltip": { + "message": "कैमरा चालने के लिए", + "description": "कैमरा टूलटिप चालने के लिए" + }, + "noCameraPermissionsTooltip": { + "message": "कैमरा अनुमतियाँ नहीं हैं", + "description": "कैमरा टूलटिप अनुमतियाँ नहीं हैं" + }, + "disableMicrophoneTooltip": { + "message": "माइक्रोफोन बंद करें", + "description": "माइक्रोफोन टूलटिप बंद करें" + }, + "enableMicrophoneTooltip": { + "message": "माइक्रोफोन चालने के लिए", + "description": "माइक्रोफोन टूलटिप चालने के लिए" + }, + "noMicrophonePermissionsTooltip": { + "message": "माइक्रोफोन अनुमतियाँ नहीं हैं", + "description": "माइक्रोफोन टूलटिप अनुमतियाँ नहीं हैं" + }, + "selectToolTooltip": { + "message": "टूल चुनें", + "description": "टूल टूलटिप चुनें" + }, + "penToolTooltip": { + "message": "पेन टूल", + "description": "पेन टूलटिप" + }, + "highlighterToolTooltip": { + "message": "हाइलाइटर टूल", + "description": "हाइलाइटर टूलटिप" + }, + "eraserToolTooltip": { + "message": "मिटाने वाला टूल", + "description": "मिटाने वाला टूलटिप" + }, + "textToolTooltip": { + "message": "टेक्स्ट टूल", + "description": "टेक्स्ट टूलटिप" + }, + "shapeToolTooltip": { + "message": "आकार टूल", + "description": "आकार टूलटिप" + }, + "arrowToolTooltip": { + "message": "तीर टूल", + "description": "तीर टूलटिप" + }, + "imageToolTooltip": { + "message": "छवि टूल", + "description": "छवि टूलटिप" + }, + "undoTooltip": { + "message": "पूर्ववत करें", + "description": "पूर्ववत करें टूलटिप" + }, + "redoTooltip": { + "message": "फिर से करें", + "description": "फिर से करें टूलटिप" + }, + "clearCanvasTooltip": { + "message": "कैनवास साफ़ करें", + "description": "कैनवास साफ़ करें टूलटिप" + }, + "moreColorsTooltip": { + "message": "और रंग", + "description": "और रंग टूलटिप" + }, + "thickStrokeTooltip": { + "message": "मोटा स्ट्रोक", + "description": "मोटा स्ट्रोक टूलटिप" + }, + "mediumStrokeTooltip": { + "message": "मध्यम स्ट्रोक", + "description": "मध्यम स्ट्रोक टूलटिप" + }, + "thinStrokeTooltip": { + "message": "पतला स्ट्रोक", + "description": "पतला स्ट्रोक टूलटिप" + }, + "togglePictureinPictureModeTooltip": { + "message": "पिक्चर-इन-पिक्चर मोड टॉगल करें", + "description": "पिक्चर-इन-पिक्चर मोड टूलटिप" + }, + "toggleFillTooltip": { + "message": "भराई टॉगल करें", + "description": "भराई टूलटिप" + }, + "drawingModeToast": { + "message": "ड्रॉइंग मोड", + "description": "ड्रॉइंग मोड टोस्ट" + }, + "blurModeToast": { + "message": "ब्लर मोड", + "description": "ब्लर मोड टोस्ट" + }, + "clearBlurredElementsTooltip": { + "message": "सभी ब्लर किए गए तत्वों को हटाएं", + "description": "सभी ब्लर किए गए तत्वों को हटाएं टूलटिप" + }, + "highlightClicksTooltip": { + "message": "क्लिक को हाइलाइट करें", + "description": "क्लिक को हाइलाइट करें टूलटिप" + }, + "highlightCursorTooltip": { + "message": "कर्सर को हाइलाइट करें", + "description": "कर्सर को हाइलाइट करें टूलटिप" + }, + "spotlightCursorTooltip": { + "message": "कर्सर को स्पॉटलाइट करें", + "description": "कर्सर को स्पॉटलाइट करें टूलटिप" + }, + "permissionsModalNoShowAgain": { + "message": "फिर से न दिखाएं", + "description": "अनुमतियों मॉडल डिस्मिस बटन" + }, + "restartModalTitle": { + "message": "क्या आप वीडियो को पुनः प्रारंभ करना चाहते हैं?", + "description": "वीडियो पुनः प्रारंभ मॉडल शीर्षक" + }, + "restartModalDescription": { + "message": "आपकी वर्तमान वीडियो प्रगति खो जाएगी।", + "description": "वीडियो पुनः प्रारंभ मॉडल विवरण" + }, + "restartModalRestart": { + "message": "वीडियो पुनः प्रारंभ करें", + "description": "वीडियो पुनः प्रारंभ मॉडल पुनः प्रारंभ बटन" + }, + "restartModalResume": { + "message": "रिज्यूम रिकॉर्डिंग", + "description": "वीडियो पुनः प्रारंभ मॉडल रिज्यूम बटन" + }, + "discardModalTitle": { + "message": "क्या आप वीडियो को छोड़ना चाहते हैं?", + "description": "वीडियो को छोड़ने का मॉडल शीर्षक" + }, + "discardModalDescription": { + "message": "आपकी वर्तमान वीडियो प्रगति खो जाएगी।", + "description": "वीडियो को छोड़ने का मॉडल विवरण" + }, + "discardModalDiscard": { + "message": "वीडियो को छोड़ें", + "description": "वीडियो को छोड़ने का मॉडल छोड़ने बटन" + }, + "discardModalResume": { + "message": "रिज्यूम रिकॉर्डिंग", + "description": "वीडियो को छोड़ने का मॉडल रिज्यूम बटन" + }, + "recorderSelectTitle": { + "message": "चुनें कि आप क्या रिकॉर्ड करना चाहते हैं", + "description": "रिकॉर्डिंग पृष्ठ में शीर्षक" + }, + "recorderSelectProgressTitle": { + "message": "रेकॉर्डिंग...", + "description": "रेकॉर्डिंग पृष्ठ में रेकॉर्डिंग के दौरान शीर्षक" + }, + "recorderSelectDescription": { + "message": "इस टैब को खुला रखें। यह आपकी रेकॉर्डिंग सहेजी जाने के बाद बंद हो जाएगा।", + "description": "रेकॉर्डिंग पृष्ठ में विवरण" + }, + "sandboxProgressTitle": { + "message": "रेकॉर्डिंग की तैयारी...", + "description": "सैंडबॉक्स पृष्ठ में रेकॉर्डिंग / सहेजने के दौरान शीर्षक" + }, + "sandboxProgressDescription": { + "message": "इस टैब को खुला रखें। यह आपकी रेकॉर्डिंग तैयार होने पर अपडेट हो जाएगा।", + "description": "सैंडबॉक्स पृष्ठ में रेकॉर्डिंग / सहेजने के दौरान विवरण" + }, + "sandboxEditorMainTitle": { + "message": "संपादक", + "description": "सैंडबॉक्स संपादक पृष्ठ में नेविगेशन का शीर्षक" + }, + "sandboxEditorCancelButton": { + "message": "रद्द करें", + "description": "सैंडबॉक्स संपादक पृष्ठ में रद्द करें बटन" + }, + "sandboxEditorRevertButton": { + "message": "मूल को पुनः लाएं", + "description": "सैंडबॉक्स संपादक पृष्ठ में पुनर्स्थापित करें बटन" + }, + "sandboxEditorResetButton": { + "message": "रीसेट", + "description": "सैंडबॉक्स संपादक पृष्ठ में रीसेट करें बटन" + }, + "sandboxEditorSaveButton": { + "message": "परिवर्तन सहेजें", + "description": "सैंडबॉक्स संपादक पृष्ठ में सहेजें बटन" + }, + "sandboxEditorSaveProgressButton": { + "message": "सहेज रहा है...", + "description": "सैंडबॉक्स संपादक पृष्ठ में सहेजें बटन के दौरान सहेजें" + }, + "sandboxAudioDragAndDrop": { + "message": "आपके ऑडियो फ़ाइल को खींचें और छोड़ें", + "description": "सैंडबॉक्स संपादक पृष्ठ में ऑडियो फ़ाइल को खींचें और छोड़ें" + }, + "sandboxAudioOrBrowse": { + "message": "या ब्राउज़ करने के लिए क्लिक करें", + "description": "सैंडबॉक्स संपादक पृष्ठ में ऑडियो फ़ाइल ब्राउज़ करने के लिए क्लिक करें" + }, + "sandboxAudioSettingsTitle": { + "message": "सेटिंग्स", + "description": "सैंडबॉक्स संपादक पृष्ठ में ऑडियो सेटिंग्स शीर्षक" + }, + "sandboxAudioVolumeLabel": { + "message": "वॉल्यूम", + "description": "सैंडबॉक्स संपादक पृष्ठ में ऑडियो वॉल्यूम लेबल" + }, + "sandboxAudioUpdateButton": { + "message": "अपडेट करें", + "description": "सैंडबॉक्स संपादक पृष्ठ में ऑडियो को अपडेट करें बटन" + }, + "sandboxCropTitle": { + "message": "क्रॉप", + "description": "सैंडबॉक्स संपादक पृष्ठ में क्रॉप शीर्षक" + }, + "widthLabel": { + "message": "चौड़ाई", + "description": "संपत्ति के लिए चौड़ाई लेबल" + }, + "heightLabel": { + "message": "ऊंचाई", + "description": "संपत्ति के लिए ऊंचाई लेबल" + }, + "leftLabel": { + "message": "बाएं", + "description": "संपत्ति के लिए बाएं लेबल" + }, + "topLabel": { + "message": "ऊपर", + "description": "संपत्ति के लिए ऊपर लेबल" + }, + "sandboxEditorTrimInfo": { + "message": "चुने हुए खंड को संपादित करने के लिए हैंडल को खींचें और बाएं बटन का उपयोग करें।", + "description": "सैंडबॉक्स संपादक में कट आपूर्ति के बारे में जानकारी" + }, + "sandboxEditorTrimButton": { + "message": "वीडियो को कटा जा रहा है", + "description": "सैंडबॉक्स संपादक में कट बटन" + }, + "sandboxEditorTrimProgressButton": { + "message": "कटाई जा रही है...", + "description": "सैंडबॉक्स संपादक में कट बटन की कटाई के दौरान" + }, + "sandboxEditorCutButton": { + "message": "खंड काटें", + "description": "सैंडबॉक्स संपादक में कट बटन" + }, + "sandboxEditorCutProgressButton": { + "message": "कटाई जा रही है...", + "description": "सैंडबॉक्स संपादक में कट बटन की कटाई के दौरान" + }, + "sandboxEditorMuteButton": { + "message": "ध्वनि बंद करें", + "description": "सैंडबॉक्स संपादक में म्यूट बटन" + }, + "sandboxEditorMuteProgressButton": { + "message": "म्यूट किया जा रहा है...", + "description": "सैंडबॉक्स संपादक में म्यूट बटन की म्यूट करते समय" + }, + "learnMoreDot": { + "message": "और जानें।", + "description": "एक डॉट के साथ और जानें" + }, + "undoLabel": { + "message": "पूर्ववत करें", + "description": "पूर्ववत लेबल" + }, + "redoLabel": { + "message": "फिर से करें", + "description": "फिर से करें लेबल" + }, + "leaveReview": { + "message": "समीक्षा छोड़ें", + "description": "समीक्षा छोड़ें बटन" + }, + "followForUpdates": { + "message": "अपडेट्स के लिए फॉलो करें", + "description": "अपडेट्स के लिए फॉलो करें बटन" + }, + "offlineLabelTitle": { + "message": "आप वर्तमान में ऑफ़लाइन हैं", + "description": "ऑफ़लाइन लेबल" + }, + "offlineLabelDescription": { + "message": "कुछ सुविधाएं फिर से कनेक्ट होने तक अनुपलब्ध हैं", + "description": "ऑफ़लाइन लेबल विवरण" + }, + "offlineLabelTryAgain": { + "message": "फिर से प्रयास करें", + "description": "ऑफ़लाइन लेबल पुनः प्रयास करें बटन" + }, + "updateChromeLabelTitle": { + "message": "क्रोम को अपडेट करने की आवश्यकता है", + "description": "क्रोम अपडेट लेबल" + }, + "updateChromeLabelDescription": { + "message": "और फ़ीचर्स तक पहुँचने के लिए अपडेट करें", + "description": "क्रोम अपडेट लेबल विवरण" + }, + "learnMoreLabel": { + "message": "और जानें", + "description": "और जानें बटन" + }, + "overLimitLabelTitle": { + "message": "वीडियो स्थानीय रूप से प्रोसेस करने के लिए बहुत लम्बा है", + "description": "संपादक में 5 मिनट से अधिक सीमा का लेबल" + }, + "overLimitLabelDescription": { + "message": "संपादन और MP4 निर्यात उपलब्ध नहीं है", + "description": "संपादक में 5 मिनट से अधिक सीमा का विवरण" + }, + "videoProcessingLabelTitle": { + "message": "वीडियो प्रसंस्करण हो रहा है...", + "description": "संपादक में वीडियो प्रसंस्करण लेबल" + }, + "videoProcessingLabelDescription": { + "message": "फ़ास्ट संपादन के लिए अपग्रेड करें", + "description": "संपादक में वीडियो प्रसंस्करण विवरण" + }, + "sandboxEditTitle": { + "message": "संपादन करें", + "description": "सैंडबॉक्स संपादक पृष्ठ में संपादन शीर्षक" + }, + "noConnectionLabel": { + "message": "कोई कनेक्शन नहीं", + "description": "कोई कनेक्शन लेबल" + }, + "notAvailableLabel": { + "message": "उपलब्ध नहीं है", + "description": "उपलब्ध नहीं है लेबल" + }, + "editButtonTitle": { + "message": "वीडियो संपादित करें", + "description": "ट्रिम लेबल बटन" + }, + "editButtonDescription": { + "message": "वीडियो को ट्रिम, कट या म्यूट करें", + "description": "ट्रिम लेबल" + }, + "preparingLabel": { + "message": "वीडियो की तैयारी हो रही है, कृपया प्रतीक्षा करें...", + "description": "तैयारी लेबल" + }, + "cropButtonTitle": { + "message": "क्रॉप", + "description": "क्रॉप लेबल बटन" + }, + "cropButtonDescription": { + "message": "वीडियो को क्रॉप और आकार दें", + "description": "क्रॉप लेबल" + }, + "addAudioButtonTitle": { + "message": "ऑडियो जोड़ें", + "description": "ऑडियो लेबल बटन" + }, + "addAudioButtonDescription": { + "message": "अपना खुद का ऑडियो अपलोड करके वीडियो में जोड़ें", + "description": "ऑडियो लेबल" + }, + "sandboxSaveTitle": { + "message": "सहेजें", + "description": "सैंडबॉक्स संपादक पृष्ठ में शीर्षक सहेजें" + }, + "signOutDriveLabel": { + "message": "ड्राइव से लॉग आउट करें", + "description": "Google ड्राइव से लॉग आउट लेबल" + }, + "savingDriveLabel": { + "message": "सहेज रहे हैं...", + "description": "Google ड्राइव में सहेज रहे हैं लेबल" + }, + "saveDriveButtonTitle": { + "message": "ड्राइव में सहेजें", + "description": "Google ड्राइव में सहेजें बटन" + }, + "saveDriveButtonDescription": { + "message": "वर्तमान संस्करण को Google ड्राइव में सहेजें", + "description": "Google ड्राइव में सहेजें लेबल" + }, + "signInDriveLabel": { + "message": "साइन इन करें और ड्राइव में सहेजें", + "description": "Google ड्राइव में साइन इन करें लेबल" + }, + "sandboxExportTitle": { + "message": "निर्यात", + "description": "सैंडबॉक्स संपादक पृष्ठ में निर्यात शीर्षक" + }, + "downloadingLabel": { + "message": "डाउनलोड हो रहा है...", + "description": "डाउनलोड हो रहा है लेबल" + }, + "downloadWEBMButtonTitle": { + "message": ".webm के रूप में डाउनलोड करें", + "description": "WEBM डाउनलोड बटन" + }, + "downloadWEBMButtonDescription": { + "message": ".webm वीडियो निर्यात करें", + "description": "WEBM डाउनलोड लेबल" + }, + "downloadMP4ButtonTitle": { + "message": ".mp4 के रूप में डाउनलोड करें", + "description": "MP4 डाउनलोड बटन" + }, + "downloadMP4ButtonDescription": { + "message": ".mp4 वीडियो निर्यात करें (सिफारिश किया जाता है)", + "description": "MP4 डाउनलोड लेबल" + }, + "downloadGIFButtonTitle": { + "message": ".gif के रूप में डाउनलोड करें", + "description": "GIF डाउनलोड बटन" + }, + "downloadGIFButtonDescription": { + "message": "एक GIF निर्यात करें (अधिकतम 30 सेकंड)", + "description": "GIF डाउनलोड लेबल" + }, + "shareModalSandboxTitle": { + "message": "अपने वीडियो को अन्यों के साथ साझा करें", + "description": "सैंडबॉक्स संपादक पृष्ठ में साझा करें शीर्षक" + }, + "shareModalSandboxDescription": { + "message": "जल्द ही! साझा करने के लिए अपडेट रहने और जानकारी मिलने के लिए अपना ईमेल छोड़ें।", + "description": "सैंडबॉक्स संपादक पृष्ठ में साझा करें विवरण" + }, + "shareModalSandboxButton": { + "message": "वेटलिस्ट में शामिल हों", + "description": "सैंडबॉक्स संपादक पृष्ठ में साझा करें ईमेल प्लेसहोल्डर" + }, + "shareSandboxButton": { + "message": "वीडियो साझा करें", + "description": "सैंडबॉक्स संपादक पृष्ठ में साझा करें बटन" + }, + "replaceAudioEditor": { + "message": "मौजूदा ऑडियो को बदलें", + "description": "संपादक में ऑडियो बदलें बटन" + }, + "zoomToPointPopup": { + "message": "कर्सर पर ज़ूम करें", + "description": "बिंदु पॉपअप पर ज़ूम करें" + }, + "stayInPagePopup": { + "message": "रिकॉर्डिंग के समय पेज में रहें", + "description": "पेज में रहें पॉपअप" + }, + "micReminderPopup": { + "message": "माइक्रोफ़ोन बंद है चेतावनी", + "description": "माइक्रोफ़ोन चेतावना पॉपअप" + }, + "helpPopup": { + "message": "सहायता", + "description": "सहायता पॉपअप बटन" + }, + "pausedRecordingToast": { + "message": "रिकॉर्डिंग रोकी गई है। फिर से आरंभ करने के लिए प्ले बटन दबाएं।", + "description": "रुकी हुई रिकॉर्डिंग मॉडल शीर्षक" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport को आपकी स्क्रीन रिकॉर्ड करने की अनुमति नहीं है", + "description": "अनुमति मॉडल शीर्षक" + }, + "chromePermissionsModalDescription": { + "message": "स्क्रीन रिकॉर्डिंग सक्षम करने के लिए, आपको MyTechPassportsportsport को आपकी स्क्रीन को कैप्चर करने की अनुमति देनी होगी जब प्रोम्प्ट होता है।", + "description": "अनुमति मॉडल विवरण" + }, + "chromePermissionsModalAction": { + "message": "स्क्रीन रिकॉर्डिंग सक्षम करें", + "description": "अनुमति मॉडल क्रिया" + }, + "chromePermissionsModalCancel": { + "message": "रद्द करें", + "description": "अनुमति मॉडल रद्द करें" + }, + "micMutedModalTitle": { + "message": "आपका माइक्रोफ़ोन म्यूट है", + "description": "माइक्रोफ़ोन म्यूट हो गया मॉडल शीर्षक" + }, + "micMutedModalDescription": { + "message": "आपकी रिकॉर्डिंग में ऑडियो शामिल करने के लिए, आपको अपने माइक्रोफ़ोन को अनम्यूट करना होगा। क्या आप बिना ऑडियो के जारी रखना चाहते हैं?", + "description": "माइक्रोफ़ोन म्यूट हो गया मॉडल विवरण" + }, + "micMutedModalAction": { + "message": "हाँ, जारी रखें", + "description": "माइक्रोफ़ोन म्यूट हो गया मॉडल जारी रखें" + }, + "micMutedModalCancel": { + "message": "रद्द करें", + "description": "माइक्रोफ़ोन म्यूट हो गया मॉडल रद्द करें" + }, + "setupTitle": { + "message": "MyTechPassport के साथ तीन सरल कदमों में शुरू हो जाइए:", + "description": "सेटअप कदम शीर्षक" + }, + "setupStep1Before": { + "message": "1- क्लिक करें ", + "description": "सेटअप कदम 1, चिन्ह के पहले। इसे आखिरी में एक स्पेस की आवश्यकता है।" + }, + "setupStep1After": { + "message": " एक्सटेंशन चिन्ह", + "description": "सेटअप कदम 1, चिन्ह के बाद। इसे पहले एक स्पेस की आवश्यकता है।" + }, + "setupStep2Before": { + "message": "2- दबाएं ", + "description": "सेटअप कदम 2, चिन्ह के पहले। इसे आखिरी में एक स्पेस की आवश्यकता है।" + }, + "setupStep2After": { + "message": " पिन आइकन", + "description": "सेटअप कदम 2, चिन्ह के बाद। इसे पहले एक स्पेस की आवश्यकता है।" + }, + "setupStep3Before": { + "message": "3- क्लिक करें ", + "description": "सेटअप कदम 3, चिन्ह के पहले। इसे आखिरी में एक स्पेस की आवश्यकता है।" + }, + "setupStep3After": { + "message": " MyTechPassportsport आइकन को शुरू करने के लिए", + "description": "सेटअप कदम 3, चिन्ह के बाद। इसे पहले एक स्पेस की आवश्यकता है।" + }, + "setupCompleteTitle": { + "message": "बढ़िया! आपका सेटअप पूरा है", + "description": "सेटअप पूरा शीर्षक" + }, + "setupCompleteDescription": { + "message": "आप अब यहां या किसी और टैब में रिकॉर्डिंग शुरू कर सकते हैं।", + "description": "सेटअप पूरा विवरण" + }, + "clickHereDrawOnboarding": { + "message": "ड्रा करने के लिए यहां क्लिक करें", + "description": "यहां क्लिक करने पर आग्रहण" + }, + "countdownMessage": { + "message": "आराम करें। किसी भी जगह पर क्लिक करके गिनती रोकने के लिए।", + "description": "गिनती संदेश" + }, + "sandboxEditorTooSmallInfo": { + "message": "संवाद के बीच के अंतराल के कारण छोटे समय सीमाओं के लिए संशोधन अशुद्ध हो सकते हैं।", + "description": "संपादक बहुत छोटा होने के बारे में जानकारी" + }, + "processingBannerEditor": { + "message": "वीडियो प्रोसेस हो रहा है, प्लेबैक अशुद्ध या टूट सकता है।", + "description": "संपादक में प्रोसेसिंग बैनर" + }, + "croppingInfoTitle": { + "message": "क्रॉपिंग कुछ समय लग सकता है", + "description": "क्रॉपिंग जानकारी शीर्षक" + }, + "croppingInfoDescription": { + "message": "तेज प्रोसेसिंग के लिए अपग्रेड करें", + "description": "क्रॉपिंग जानकारी विवरण" + }, + "micOnToast": { + "message": "माइक्रोफ़ोन सक्षम है", + "description": "माइक्रोफ़ोन सक्षम टोस्ट शीर्षक" + }, + "micOffToast": { + "message": "माइक्रोफ़ोन बंद है", + "description": "माइक्रोफ़ोन बंद टोस्ट शीर्षक" + }, + "hideUIAlerts": { + "message": "UI सूचनाओं को छुपाएं", + "description": "UI सूचनाओं को छुपाएं बटन" + }, + "noShowAgain": { + "message": "फिर से दिखाना नहीं", + "description": "फिर से दिखाना नहीं बटन" + }, + "toolbarHoverOnly": { + "message": "उपयोग न करने पर टूलबार छुपाएं", + "description": "केवल हवाकारी पर टूलबार दिखाएं बटन" + }, + "stopRecording": { + "message": "रिकॉर्डिंग बंद करें", + "description": "रिकॉर्डिंग स्क्रीन में बंद करें बटन" + }, + "updateAnnouncementTitle": { + "message": "नए MyTechPassport में आपका स्वागत है!", + "description": "मौजूदा उपयोगकर्ताओं के लिए अपडेट घोषणा शीर्षक" + }, + "updateAnnouncementDescription": { + "message": "हम एक नए दिखावट और कई रोमांचक सुविधाओं का परिचय कर रहे हैं, लेकिन चिंता न करें, यह वही मुफ्त, निजी और ओपन सोर्स एक्सटेंशन है जो आप जानते और पसंद करते हैं।", + "description": "मौजूदा उपयोगकर्ताओं के लिए अपडेट घोषणा विवरण" + }, + "updateAnnouncementLearnMore": { + "message": "अपडेट के बारे में और अधिक जानें।", + "description": "मौजूदा उपयोगकर्ताओं के लिए अपडेट घोषणा और अधिक जानें लिंक" + }, + "updateAnnouncementButton": { + "message": "शुरू हो जाओ", + "description": "मौजूदा उपयोगकर्ताओं के लिए अपडेट घोषणा बटन" + }, + "streamErrorModalTitle": { + "message": "रिकॉर्डिंग शुरू करने में त्रुटि", + "description": "स्ट्रीम त्रुटि मॉडल शीर्षक" + }, + "streamErrorModalDescription": { + "message": "लगता है कि रिकॉर्डिंग शुरू करने में त्रुटि हुई है। अपने ब्राउज़र को फिर से चालने और पुनः प्रयास करें। यदि समस्या बरकरार रहती है, कृपया हमसे संपर्क करें support@MyTechPassportsport.io पर।", + "description": "स्ट्रीम त्रुटि मॉडल विवरण" + }, + "highestQuality": { + "message": "सर्वोत्तम गुणवत्ता", + "description": "पॉपअप में सर्वोत्तम गुणवत्ता का लेबल टॉगल करें" + }, + "restoreRecording": { + "message": "आखिरी रिकॉर्डिंग को पुनर्स्थापित करें", + "description": "पॉपअप में आखिरी रिकॉर्डिंग को पुनर्स्थापित करने के लिए बटन" + }, + "havingIssuesButton": { + "message": "कोई समस्या है?", + "description": "संपादक में समस्या बटन" + }, + "havingIssuesModalTitle": { + "message": "अपनी रिकॉर्डिंग देख नहीं सकते?", + "description": "संपादक में समस्या मॉडल टाइटल" + }, + "havingIssuesModalDescription": { + "message": "अगर आपने अपनी रिकॉर्डिंग पूरी की है और इस पृष्ठ पर अपने वीडियो को देखते बिना पाए हैं, तो यदि यह उपलब्ध है, आप वीडियो के रॉ डेटा को डाउनलोड करने का प्रयास कर सकते हैं। आप भी हमसे संपर्क कर सकते हैं और एक बग रिपोर्ट सबमिट कर सकते हैं।", + "description": "संपादक में समस्या मॉडल विवरण" + }, + "havingIssuesModalButton": { + "message": "रॉ वीडियो डेटा डाउनलोड करें", + "description": "संपादक में समस्या मॉडल बटन" + }, + "havingIssuesModalButton2": { + "message": "बग रिपोर्ट करें", + "description": "संपादक में समस्या मॉडल बटन 2" + }, + "noRecordingFound": { + "message": "कोई रिकॉर्डिंग नहीं मिली, दुखी हैं :(", + "description": "संपादक में कोई रिकॉर्डिंग नहीं मिली अलर्ट" + }, + "memoryLimitTitle": { + "message": "मेमोरी सीमा पहुंच गई", + "description": "मेमोरी सीमा पहुंच गई शीर्षक" + }, + "memoryLimitDescription": { + "message": "आपके डिवाइस की रिकॉर्डिंग के लिए उपलब्ध मेमोरी का समय समाप्त हो गया है, इसके परिणामस्वरूप रिकॉर्डिंग स्वतः बंद हो गई है। अगर आप और लंबे समय तक रिकॉर्ड करना चाहते हैं, तो वीडियो की गुणवत्ता को कम करने का प्रयास करें या अपने डिवाइस पर कुछ स्थान मुक्त करें।", + "description": "मेमोरी सीमा पहुंच गई विवरण" + }, + "understoodButton": { + "message": "समझा", + "description": "समझा बटन" + }, + "notEnoughSpaceTitle": { + "message": "पर्याप्त स्थान नहीं", + "description": "पर्याप्त स्थान नहीं शीर्षक" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassportsport को रिकॉर्ड करने के लिए कम से कम 1 जीबी फ्री स्थान की आवश्यकता है। कृपया स्थान मुक्त करें और पुनः प्रयास करें।", + "description": "पर्याप्त स्थान नहीं विवरण" + }, + "clearSpaceButton": { + "message": "पिछली रिकॉर्डिंग हटाएं", + "description": "पिछली रिकॉर्डिंग हटाएं बटन" + }, + "sandboxAdvancedTitle": { + "message": "उन्नत", + "description": "सैंडबॉक्स संपादक पृष्ठ में उन्नत खंड" + }, + "rawRecordingButtonTitle": { + "message": "कच्चा वीडियो फ़ाइल डाउनलोड करें", + "description": "कच्चे रिकॉर्डिंग बटन डाउनलोड करें" + }, + "rawRecordingButtonDescription": { + "message": "मूल रिकॉर्डिंग डेटा को निर्यात करें", + "description": "कच्चे रिकॉर्डिंग लेबल डाउनलोड करें" + }, + "troubleshootButtonTitle": { + "message": "अपनी रिकॉर्डिंग के लिए मदद प्राप्त करें", + "description": "समस्या समाधान बटन" + }, + "troubleShootButtonDescription": { + "message": "अपने वीडियो को पुनः प्राप्त करें और अन्य समस्याओं का समाधान करें", + "description": "समस्या समाधान लेबल" + }, + "rawRecordingModalTitle": { + "message": "कच्चा वीडियो फ़ाइल डाउनलोड करें", + "description": "कच्चे रिकॉर्डिंग मॉडल शीर्षक" + }, + "rawRecordingModalDescription": { + "message": "कच्चा वीडियो फ़ाइल वह मूल वीडियो फ़ाइल है जो MyTechPassport द्वारा रिकॉर्ड की गई है। इस वीडियो को प्रोसेस या संपादित नहीं किया गया है, इसलिए यह बहुत बड़ा हो सकता है और सभी उपकरणों पर प्लेबल नहीं हो सकता है। यदि आपको प्रोसेस्ड वीडियो के साथ समस्या हो रही है, तो आप इस फ़ाइल का उपयोग अपने वीडियो को पुनः प्राप्त करने के लिए कर सकते हैं।", + "description": "कच्चे रिकॉर्डिंग मॉडल विवरण" + }, + "rawRecordingModalButton": { + "message": "डाउनलोड करें", + "description": "कच्चे रिकॉर्डिंग मॉडल बटन" + }, + "troubleshootModalTitle": { + "message": "सिस्टम जानकारी और वीडियो डेटा डाउनलोड करें और समस्या समाधान के लिए भेजें", + "description": "समस्या समाधान मॉडल शीर्षक" + }, + "troubleshootModalDescription": { + "message": "डाउनलोड करने के बाद, सहायता@MyTechPassport.io पर फ़ाइल भेजें और संबंधित जानकारी के साथ। हम इन डेटा का उपयोग आपकी एक्सटेंशन के साथ किसी भी समस्या को समाधान करने और आपके वीडियो को यदि संभव हो तो पुनः प्राप्त करने के लिए करेंगे।", + "description": "समस्या समाधान मॉडल विवरण" + }, + "troubleshootModalButton": { + "message": "डाउनलोड करें", + "description": "समस्या समाधान मॉडल बटन" + }, + "overLimitModalTitle": { + "message": "वीडियो को आपके डिवाइस में प्रोसेस करने के लिए बहुत लम्बी है", + "description": "5 मिनट सीमा मॉडल शीर्षक" + }, + "overLimitModalDescription": { + "message": "क्योंकि MyTechPassport पूरी तरह से निजी है और स्थानीय रूप से चलता है, यह आपके डिवाइस के हार्डवेयर द्वारा सीमित होता है। इस लम्बाई के वीडियो को प्रोसेस करना बहुत समय लगेगा और बहुत अधिक संसाधनों की आवश्यकता होगी। फिकर न करें, आप फिर भी WEBM फ़ाइल या रॉ रिकॉर्डिंग डाउनलोड कर सकते हैं, लेकिन संपादन और MP4 निर्यात उपलब्ध नहीं हैं। इसके बावजूद, आप फिर भी कोशिश कर सकते हैं कि वीडियो को प्रोसेस करने का प्रयास करें, अगर आप खतरों को समझते हैं।", + "description": "5 मिनट सीमा मॉडल विवरण" + }, + "overLimitModalButton": { + "message": "मैं खतरा समझता हूँ, फिर भी कोशिश करें", + "description": "5 मिनट सीमा मॉडल बटन" + }, + "overLimitModalLearnMore": { + "message": "लंबे वीडियो को प्रोसेस करने के बारे में और जानें।", + "description": "5 मिनट सीमा मॉडल की अधिक जानकारी वाला लिंक" + }, + + "recoveryModeTitle": { + "message": "पुनर्प्राप्ति मोड", + "description": "पुनर्प्राप्ति मोड का शीर्षक" + }, + + "downloadForTroubleshootingOption": { + "message": "समस्या समाधान के लिए डेटा डाउनलोड करें", + "description": "समस्या समाधान के लिए डाउनलोड करने का विकल्प" + }, + "getHelpNav": { + "message": "सहायता केंद्र", + "description": "सहायता नेविगेशन आइटम" + }, + "audioWarningTitle": { + "message": "कंप्यूटर ऑडियो रिकॉर्ड करें", + "description": "ऑडियो चेतावनी शीर्षक" + }, + "audioWarningDescription": { + "message": "इस पेज से ऑडियो रिकॉर्ड करने के लिए, आपको '$tab$' पर स्विच करना होगा।", + "description": "ऑडियो चेतावनी विवरण", + "placeholders": { + "tab": { + "content": "$1", + "example": "टैब क्षेत्र" + } + } + }, + "extensionNotSupportedTitle": { + "message": "एक्सटेंशन टैब पर समर्थित नहीं", + "description": "एक्सटेंशन टैब पर समर्थित नहीं शीर्षक" + }, + "extensionNotSupportedDescription": { + "message": "आपके पिछले टैब पर MyTechPassport समर्थित नहीं था। आप अपनी रिकॉर्डिंग यहाँ पर शुरू कर सकते हैं और फिर टैब पर स्विच कर सकते हैं, लेकिन आपका कैमरा और टूलबार दिखाई नहीं देंगे।", + "description": "एक्सटेंशन टैब पर समर्थित नहीं शीर्षक विवरण" + }, + "backupsTitle": { + "message": "अपनी MyTechPassport रिकॉर्डिंग्स के लिए स्थानीय बैकअप सेट अप करें", + "description": "बैकअप शीर्षक" + }, + "backupsDescription1": { + "message": "आपकी सभी रिकॉर्डिंग्स की प्रतिलिपि रखें। यदि आप बैकअप सेट नहीं करते हैं, तो आपकी रिकॉर्डिंग्स को डाउनलोड करने के लिए ही बचाया जाएगा।", + "description": "बैकअप विवरण" + }, + "backupsDescription2": { + "message": "यदि आप डाउनलोड्स या अन्य सिस्टम फ़ोल्डर्स में सहेजने का प्रयास कर रहे हैं, तो आपको पहले एक नया फ़ोल्डर बनाने की आवश्यकता हो सकती है।", + "description": "बैकअप विवरण" + }, + "backupsSelectFolder": { + "message": "एक फ़ोल्डर चुनें", + "description": "फ़ोल्डर चुनने का बटन" + }, + "backupsNotNow": { + "message": "अभी नहीं", + "description": "अब नहीं बटन" + }, + "backupsOnTitle": { + "message": "आपकी रिकॉर्डिंग्स स्थानीय रूप से बैकअप किए जा रहे हैं", + "description": "सक्रिय बैकअप शीर्षक" + }, + "backupsOnDescription": { + "message": "रिकॉर्ड करते समय हर बार अनुमतियों के लिए पूछा जाने को रोकने के लिए हम आपको सुझाव देते हैं कि आप इस टैब को खोले रखें।", + "description": "सक्रिय बैकअप विवरण" + }, + "backupsClose": { + "message": "तब भी टैब बंद करें", + "description": "फिर भी टैब बंद करें बटन" + }, + "backupsStop": { + "message": "सभी रिकॉर्डिंग्स का बैकअप बंद करें", + "description": "बैकअप बंद करें बटन" + }, + "backupsConfirmTitle": { + "message": "कृपया अपने स्थानीय MyTechPassport बैकअप फ़ोल्डर तक पहुँच की पुनः पुष्टि करें", + "description": "बैकअप पुष्टि शीर्षक" + }, + "backupsConfirmDescription": { + "message": "हमें खेद है, लेकिन हमें आपकी रिकॉर्डिंग्स को स्थानीय रूप से बैकअप करने के लिए एक बार फिर आपकी अनुमति की आवश्यकता है। दुखद है कि हर बार यह सवाल पूछना होगा जब आप इस टैब को बंद करते हैं, जो ब्राउज़र को बंद करने या अपने कंप्यूटर को पुनरारंभ करने पर हो सकता है।", + "description": "बैकअप पुष्टि विवरण" + }, + "backupsConfirmAllow": { + "message": "MyTechPassport को रिकॉर्डिंग्स को बैकअप करने की अनुमति देने दें", + "description": "बैकअप पुष्टि अनुमति बटन" + }, + "backupsToggle": { + "message": "रिकॉर्डिंग्स का बैकअप करें", + "description": "बैकअप टॉगल लेबल" + }, + "backupPermissionFailTitle": { + "message": "रिकॉर्डिंग की बैकअप के लिए अनुमति नहीं दी गई", + "description": "बैकअप अनुमति असफल शीर्षक" + }, + "backupPermissionFailDescription": { + "message": "आपने अपनी रिकॉर्डिंग्स की स्थानीय बैकअप के लिए कोई फ़ोल्डर चुना नहीं है। आपके ब्राउज़र संस्करण या ऑपरेटिंग सिस्टम के आधार पर आपको हर बार रिकॉर्डिंग शुरू करने पर फ़ोल्डर का चयन करने के लिए कहा जा सकता है। आप फिर से कोशिश कर सकते हैं, या यदि आप दोहरी अनुमतियों को नहीं देना चाहते हैं, तो पूरी तरह से बैकअप को अक्षम कर सकते हैं।", + "description": "बैकअप अनुमति असफल विवरण" + }, + "recordAudioWarningMacTitle": { + "message": "कंप्यूटर ऑडियो रिकॉर्ड करें", + "description": "ऑडियो चेतावना शीर्षक" + }, + "recordAudioWarningMacDescription": { + "message": "macOS में, आप केवल टैब ऑडियो को रिकॉर्ड कर सकते हैं। 'भी Chrome टैब ऑडियो साझा करें' को सक्षम करने के लिए Chrome टैब विकल्प का चयन करें और सुनिश्चित करें।", + "description": "macOS ऑडियो चेतावना विवरण" + }, + "recordAudioWarningOtherTitle": { + "message": "कंप्यूटर ऑडियो रिकॉर्ड करें", + "description": "ऑडियो चेतावना शीर्षक" + }, + "recordAudioWarningOtherDescription": { + "message": "कंप्यूटर ऑडियो को रिकॉर्ड करना चाहते हैं तो 'सिस्टम ऑडियो साझा करें' विकल्प को टॉगल करने की सुनिश्चित करें। इस विकल्प को दिखाई नहीं देता है, तो कृपया Chrome को अपडेट करने का प्रयास करें, या टैब रिकॉर्डिंग पर स्विच करें।", + "description": "अन्य ऑडियो चेतावना विवरण" + }, + + "maxResolutionLabel": { + "message": "अधिकतम रिज़ॉल्यूशन", + "description": "सेटिंग्स मेनू में अधिकतम रिज़ॉल्यूशन का लेबल" + }, + "maxFPSLabel": { + "message": "अधिकतम FPS", + "description": "सेटिंग्स मेनू में अधिकतम FPS का लेबल" + }, + + "notEnoughRAM": { + "message": "पर्याप्त रैम नहीं", + "description": "सेटिंग्स मेनू में 'पर्याप्त रैम नहीं' लेबल" + }, + "resizeWindowLabel": { + "message": "विंडो का आकार बदलें", + "description": "सेटिंग्स मेनू में विंडो के आकार के लिए लेबल" + }, + "screenTooSmallTooltip": { + "message": "इस रिज़ॉल्यूशन के लिए स्क्रीन बहुत छोटा है", + "description": "सेटिंग्स मेनू में स्क्रीन बहुत छोटा है टूलटिप" + }, + "maxResolutionTooltip": { + "message": "इस उपकरण पर इस रिज़ॉल्यूशन पर रिकॉर्ड नहीं किया जा सकता है", + "description": "सेटिंग्स मेनू में इस रिज़ॉल्यूशन पर रिकॉर्ड नहीं किया जा सकता है टूलटिप" + }, + "permissionsModalReview": { + "message": "अनुमतियों की समीक्षा करें", + "description": "अनुमतियों की समीक्षा करने का बटन" + } +} diff --git a/build/_locales/id/messages.json b/build/_locales/id/messages.json new file mode 100644 index 0000000..e0ac3da --- /dev/null +++ b/build/_locales/id/messages.json @@ -0,0 +1,1041 @@ +{ + "extName": { + "message": "MyTechPassport - Perekam Layar & Alat Anotasi", + "description": "Nama ekstensi" + }, + "extDesc": { + "message": "Perekam layar terbaik gratis tanpa batasan. Tangkap, beri anotasi, zoom, kaburkan, sunting video, dan banyak lagi - tanpa perlu masuk, & ramah privasi.", + "description": "Deskripsi ekstensi" + }, + "recordTab": { + "message": "Rekam", + "description": "Label tab Rekam pada popup" + }, + "videosTab": { + "message": "Video Anda", + "description": "Label tab Video pada popup" + }, + "screenType": { + "message": "Layar", + "description": "Label jenis perekaman layar pada popup" + }, + "tabType": { + "message": "Area tab", + "description": "Label jenis perekaman area tab pada popup" + }, + "cameraType": { + "message": "Kamera", + "description": "Label jenis perekaman kamera pada popup" + }, + "mockupType": { + "message": "Mockup", + "description": "Label jenis perekaman mockup pada popup" + }, + "customAreaRecordingDisabledTitle": { + "message": "Perekaman area kustom dinonaktifkan", + "description": "Peringatan perekaman area kustom dinonaktifkan pada popup untuk versi Chrome yang lebih lama dari 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Perbarui versi Chrome ke 110+", + "description": "Deskripsi peringatan perekaman area kustom dinonaktifkan pada popup untuk versi Chrome yang lebih lama dari 104" + }, + "customAreaRecordingDisabledAction": { + "message": "Perbarui", + "description": "Tindakan peringatan perekaman area kustom dinonaktifkan pada popup untuk versi Chrome yang lebih lama dari 104" + }, + "permissionsModalTitle": { + "message": "Periksa izin Anda", + "description": "Judul modal peringatan izin kamera/mikrofon" + }, + "permissionsModalDescription": { + "message": "Sepertinya MyTechPassport tidak dapat mengakses kamera atau mikrofon Anda. Pastikan untuk mengizinkan akses dengan mengklik ikon kamera di bilah alamat.", + "description": "Deskripsi modal peringatan izin kamera/mikrofon" + }, + "permissionsModalDismiss": { + "message": "Abaikan", + "description": "Tombol abaikan modal peringatan izin kamera/mikrofon" + }, + "allowCameraAccessButton": { + "message": "Izinkan akses kamera", + "description": "Tombol izinkan akses kamera" + }, + "allowMicrophoneAccessButton": { + "message": "Izinkan akses mikrofon", + "description": "Tombol izinkan akses mikrofon" + }, + "pushToTalkLabel": { + "message": "Tekan untuk berbicara", + "description": "Label sakelar Tekan untuk berbicara" + }, + "customAreaLabel": { + "message": "Atur area untuk direkam", + "description": "Label sakelar area kustom" + }, + "flipCameraLabel": { + "message": "Putar kamera", + "description": "Label sakelar putar kamera" + }, + "backgroundEffectsLabel": { + "message": "Efek latar belakang", + "description": "Label sakelar efek latar belakang" + }, + "recordButtonLabel": { + "message": "Mulai merekam", + "description": "Label tombol rekam" + }, + "recordButtonInProgressLabel": { + "message": "Memulai merekam...", + "description": "Label tombol rekam dalam proses" + }, + "recordButtonNoCameraLabel": { + "message": "Atur kamera untuk merekam", + "description": "Label tombol rekam saat dalam mode kamera dan tidak ada kamera yang dipilih" + }, + "showMoreOptionsLabel": { + "message": "Tampilkan opsi lebih lanjut", + "description": "Label tampilkan opsi lebih lanjut" + }, + + "systemAudioLabel": { + "message": "Sertakan audio sistem", + "description": "Label audio sistem/tab" + }, + "hideToolbarLabel": { + "message": "Sembunyikan toolbar", + "description": "Label sembunyikan toolbar" + }, + "countdownLabel": { + "message": "Hitung mundur", + "description": "Label hitung mundur" + }, + "alarmLabel": { + "message": "Atur batas waktu", + "description": "Label alarm" + }, + "blurTypeLabel": { + "message": "Blur", + "description": "Label latar belakang blur" + }, + "noneDropdownLabel": { + "message": "Tidak ada", + "description": "Tidak ada perangkat yang dipilih" + }, + "noCameraDropdownLabel": { + "message": "Tidak ada kamera", + "description": "Tidak ada kamera yang dipilih" + }, + "noMicrophoneDropdownLabel": { + "message": "Tidak ada mikrofon", + "description": "Tidak ada mikrofon yang dipilih" + }, + "selectSourceDropdownPlaceholder": { + "message": "Pilih sumber", + "description": "Pilih tempat untuk sumber" + }, + "offLabel": { + "message": "Mati", + "description": "Label Mati pada dropdown" + }, + "regionWidthLabel": { + "message": "Lebar", + "description": "Label lebar daerah" + }, + "regionHeightLabel": { + "message": "Tinggi", + "description": "Label tinggi daerah" + }, + "addImageToastTitle": { + "message": "Klik untuk menempatkan gambar", + "description": "Pemberitahuan ketika menambahkan gambar baru" + }, + "finishRecordingTooltip": { + "message": "Selesaikan perekaman", + "description": "Petunjuk untuk menyelesaikan perekaman" + }, + "restartRecordingTooltip": { + "message": "Mulai ulang perekaman", + "description": "Petunjuk untuk memulai ulang perekaman" + }, + "pauseRecordingTooltip": { + "message": "Jeda perekaman", + "description": "Petunjuk untuk menjeda perekaman" + }, + "resumeRecordingTooltip": { + "message": "Lanjutkan perekaman", + "description": "Petunjuk untuk melanjutkan perekaman" + }, + "cancelRecordingTooltip": { + "message": "Batal perekaman", + "description": "Petunjuk untuk membatalkan perekaman" + }, + "toggleDrawingToolsTooltip": { + "message": "Hidupkan/Matikan alat gambar", + "description": "Petunjuk untuk mengaktifkan/menonaktifkan alat gambar" + }, + "toggleBlurToolTooltip": { + "message": "Hidupkan/Matikan alat blur", + "description": "Petunjuk untuk mengaktifkan/menonaktifkan alat blur" + }, + "toggleCursorOptionsTooltip": { + "message": "Hidupkan/Matikan opsi kursor", + "description": "Petunjuk untuk mengaktifkan/menonaktifkan opsi kursor" + }, + "disableCameraTooltip": { + "message": "Matikan kamera", + "description": "Petunjuk untuk mematikan kamera" + }, + "enableCameraTooltip": { + "message": "Hidupkan kamera", + "description": "Petunjuk untuk menghidupkan kamera" + }, + "noCameraPermissionsTooltip": { + "message": "Tidak ada izin kamera", + "description": "Petunjuk untuk tidak ada izin kamera" + }, + "disableMicrophoneTooltip": { + "message": "Matikan mikrofon", + "description": "Petunjuk untuk mematikan mikrofon" + }, + "enableMicrophoneTooltip": { + "message": "Hidupkan mikrofon", + "description": "Petunjuk untuk menghidupkan mikrofon" + }, + "noMicrophonePermissionsTooltip": { + "message": "Tidak ada izin mikrofon", + "description": "Petunjuk untuk tidak ada izin mikrofon" + }, + "selectToolTooltip": { + "message": "Pilih alat", + "description": "Petunjuk untuk memilih alat" + }, + "penToolTooltip": { + "message": "Alat pena", + "description": "Petunjuk untuk alat pena" + }, + "highlighterToolTooltip": { + "message": "Alat penyorot", + "description": "Petunjuk untuk alat penyorot" + }, + "eraserToolTooltip": { + "message": "Alat penghapus", + "description": "Petunjuk untuk alat penghapus" + }, + "textToolTooltip": { + "message": "Alat teks", + "description": "Petunjuk untuk alat teks" + }, + "shapeToolTooltip": { + "message": "Alat bentuk", + "description": "Petunjuk untuk alat bentuk" + }, + "arrowToolTooltip": { + "message": "Alat panah", + "description": "Petunjuk untuk alat panah" + }, + "imageToolTooltip": { + "message": "Alat gambar", + "description": "Petunjuk untuk alat gambar" + }, + "undoTooltip": { + "message": "Batalkan", + "description": "Petunjuk untuk membatalkan" + }, + "redoTooltip": { + "message": "Ulangi", + "description": "Petunjuk untuk mengulangi" + }, + "clearCanvasTooltip": { + "message": "Hapus kanvas", + "description": "Petunjuk untuk menghapus kanvas" + }, + "moreColorsTooltip": { + "message": "Warna lebih banyak", + "description": "Petunjuk untuk warna lebih banyak" + }, + "thickStrokeTooltip": { + "message": "Goresan tebal", + "description": "Petunjuk untuk goresan tebal" + }, + "mediumStrokeTooltip": { + "message": "Goresan sedang", + "description": "Petunjuk untuk goresan sedang" + }, + "thinStrokeTooltip": { + "message": "Goresan tipis", + "description": "Petunjuk untuk goresan tipis" + }, + "togglePictureinPictureModeTooltip": { + "message": "Hidupkan/Matikan mode gambar dalam gambar", + "description": "Petunjuk untuk mengaktifkan/menonaktifkan mode gambar dalam gambar" + }, + "toggleFillTooltip": { + "message": "Hidupkan/Matikan isian", + "description": "Petunjuk untuk mengaktifkan/menonaktifkan isian" + }, + "drawingModeToast": { + "message": "Mode menggambar", + "description": "Pemberitahuan tentang mode menggambar" + }, + "blurModeToast": { + "message": "Mode blur", + "description": "Pemberitahuan tentang mode blur" + }, + "clearBlurredElementsTooltip": { + "message": "Hapus semua elemen yang diblur", + "description": "Petunjuk untuk menghapus semua elemen yang diblur" + }, + "highlightClicksTooltip": { + "message": "Sorot klik", + "description": "Petunjuk untuk sorotan klik" + }, + "highlightCursorTooltip": { + "message": "Sorotan kursor", + "description": "Petunjuk untuk sorotan kursor" + }, + "spotlightCursorTooltip": { + "message": "Kursor Spotlight", + "description": "Tooltip Kursor Spotlight" + }, + "permissionsModalNoShowAgain": { + "message": "Jangan tampilkan lagi", + "description": "Tombol tolak modal Izin" + }, + "restartModalTitle": { + "message": "Apakah Anda yakin ingin memulai ulang perekaman?", + "description": "Judul modal Memulai Ulang Perekaman" + }, + "restartModalDescription": { + "message": "Progress video Anda saat ini akan hilang.", + "description": "Deskripsi modal Memulai Ulang Perekaman" + }, + "restartModalRestart": { + "message": "Memulai ulang perekaman", + "description": "Tombol memulai ulang modal Memulai Ulang Perekaman" + }, + "restartModalResume": { + "message": "Lanjutkan perekaman", + "description": "Tombol lanjutkan modal Memulai Ulang Perekaman" + }, + "discardModalTitle": { + "message": "Apakah Anda yakin ingin membuang perekaman?", + "description": "Judul modal Membuang Perekaman" + }, + "discardModalDescription": { + "message": "Progress video Anda saat ini akan hilang.", + "description": "Deskripsi modal Membuang Perekaman" + }, + "discardModalDiscard": { + "message": "Membuang perekaman", + "description": "Tombol membuang modal Membuang Perekaman" + }, + "discardModalResume": { + "message": "Lanjutkan perekaman", + "description": "Tombol lanjutkan modal Membuang Perekaman" + }, + "recorderSelectTitle": { + "message": "Pilih apa yang ingin Anda rekam", + "description": "Judul halaman perekaman" + }, + "recorderSelectProgressTitle": { + "message": "Merekam...", + "description": "Judul halaman perekaman saat merekam" + }, + "recorderSelectDescription": { + "message": "Simpan tab ini terbuka. Ini akan ditutup setelah perekaman Anda disimpan.", + "description": "Deskripsi halaman perekaman" + }, + "sandboxProgressTitle": { + "message": "Mempersiapkan perekaman...", + "description": "Judul halaman sandbox saat merekam / menyimpan" + }, + "sandboxProgressDescription": { + "message": "Simpan tab ini terbuka. Ini akan diperbarui dengan perekaman Anda saat sudah siap.", + "description": "Deskripsi halaman sandbox saat merekam / menyimpan" + }, + "sandboxEditorMainTitle": { + "message": "Editor", + "description": "Judul navigasi halaman editor sandbox" + }, + "sandboxEditorCancelButton": { + "message": "Batal", + "description": "Tombol batal di halaman editor sandbox" + }, + "sandboxEditorRevertButton": { + "message": "Kembalikan ke asli", + "description": "Tombol kembali di halaman editor sandbox" + }, + "sandboxEditorResetButton": { + "message": "Atur ulang", + "description": "Tombol atur ulang di halaman editor sandbox" + }, + "sandboxEditorSaveButton": { + "message": "Simpan perubahan", + "description": "Tombol simpan di halaman editor sandbox" + }, + "sandboxEditorSaveProgressButton": { + "message": "Menyimpan...", + "description": "Tombol simpan di halaman editor sandbox saat menyimpan" + }, + "sandboxAudioDragAndDrop": { + "message": "Seret dan lepaskan file audio Anda", + "description": "Seret dan lepaskan file audio di halaman editor sandbox" + }, + "sandboxAudioOrBrowse": { + "message": "Atau klik untuk mencari", + "description": "Atau klik untuk mencari file audio di halaman editor sandbox" + }, + "sandboxAudioSettingsTitle": { + "message": "Pengaturan", + "description": "Judul pengaturan audio di halaman editor sandbox" + }, + "sandboxAudioVolumeLabel": { + "message": "Volume", + "description": "Label volume audio di halaman editor sandbox" + }, + "sandboxAudioUpdateButton": { + "message": "Perbarui", + "description": "Tombol perbarui audio di halaman editor sandbox" + }, + "sandboxCropTitle": { + "message": "Potong", + "description": "Judul potong di halaman editor sandbox" + }, + "widthLabel": { + "message": "Lebar", + "description": "Label lebar untuk properti" + }, + "heightLabel": { + "message": "Tinggi", + "description": "Label tinggi untuk properti" + }, + "leftLabel": { + "message": "Kiri", + "description": "Label kiri untuk properti" + }, + "topLabel": { + "message": "Atas", + "description": "Label atas untuk properti" + }, + "sandboxEditorTrimInfo": { + "message": "Seret pegangan dan gunakan tombol di sebelah kiri untuk mengedit bagian yang dipilih.", + "description": "Info tentang pemangkasan di halaman editor sandbox" + }, + "sandboxEditorTrimButton": { + "message": "Potong video", + "description": "Tombol potong di halaman editor sandbox" + }, + "sandboxEditorTrimProgressButton": { + "message": "Memotong...", + "description": "Tombol potong di halaman editor sandbox saat memotong" + }, + "sandboxEditorCutButton": { + "message": "Potong bagian", + "description": "Tombol potong bagian di halaman editor sandbox" + }, + "sandboxEditorCutProgressButton": { + "message": "Memotong...", + "description": "Tombol potong bagian di halaman editor sandbox saat memotong" + }, + "sandboxEditorMuteButton": { + "message": "Bisukan audio", + "description": "Tombol bisu di halaman editor sandbox" + }, + "sandboxEditorMuteProgressButton": { + "message": "Mematikan...", + "description": "Tombol bisu di halaman editor sandbox saat mematikan" + }, + "learnMoreDot": { + "message": "Pelajari lebih lanjut.", + "description": "Pelajari lebih lanjut dengan titik" + }, + "undoLabel": { + "message": "Urungkan", + "description": "Label urungkan" + }, + "redoLabel": { + "message": "Ulangi", + "description": "Label ulangi" + }, + "leaveReview": { + "message": "Tinggalkan ulasan", + "description": "Tombol tinggalkan ulasan" + }, + "followForUpdates": { + "message": "Ikuti untuk pembaruan", + "description": "Tombol Ikuti untuk pembaruan" + }, + "offlineLabelTitle": { + "message": "Anda saat ini offline", + "description": "Label Offline" + }, + "offlineLabelDescription": { + "message": "Beberapa fitur tidak tersedia sampai Anda terhubung kembali", + "description": "Deskripsi label Offline" + }, + "offlineLabelTryAgain": { + "message": "Coba lagi", + "description": "Tombol Coba lagi label Offline" + }, + "updateChromeLabelTitle": { + "message": "Chrome perlu diperbarui", + "description": "Label Perbarui Chrome" + }, + "updateChromeLabelDescription": { + "message": "Perbarui untuk mengakses lebih banyak fitur", + "description": "Deskripsi label Perbarui Chrome" + }, + "learnMoreLabel": { + "message": "Pelajari lebih lanjut", + "description": "Tombol Pelajari lebih lanjut" + }, + "overLimitLabelTitle": { + "message": "Video terlalu panjang untuk diproses secara lokal", + "description": "Label batas lebih dari 5 menit dalam editor" + }, + "overLimitLabelDescription": { + "message": "Pengeditan dan ekspor ke format MP4 tidak tersedia", + "description": "Deskripsi batas lebih dari 5 menit dalam editor" + }, + "videoProcessingLabelTitle": { + "message": "Video sedang diproses...", + "description": "Label Proses video di editor" + }, + "videoProcessingLabelDescription": { + "message": "Upgrade untuk pengeditan yang lebih cepat", + "description": "Deskripsi Proses video di editor" + }, + "sandboxEditTitle": { + "message": "Edit", + "description": "Judul Edit di halaman editor Sandbox" + }, + "noConnectionLabel": { + "message": "Tidak ada koneksi", + "description": "Label Tidak ada koneksi" + }, + "notAvailableLabel": { + "message": "Tidak tersedia", + "description": "Label Tidak tersedia" + }, + "editButtonTitle": { + "message": "Edit video", + "description": "Tombol Potong di editor" + }, + "editButtonDescription": { + "message": "Potong, potong, atau matikan suara video", + "description": "Label Potong" + }, + "preparingLabel": { + "message": "Persiapan video, harap tunggu...", + "description": "Label Persiapan" + }, + "cropButtonTitle": { + "message": "Potong", + "description": "Tombol Potong label" + }, + "cropButtonDescription": { + "message": "Potong dan ubah ukuran video", + "description": "Label Potong" + }, + "addAudioButtonTitle": { + "message": "Tambahkan audio", + "description": "Tombol Tambahkan audio label" + }, + "addAudioButtonDescription": { + "message": "Unggah audio Anda sendiri untuk ditambahkan ke video", + "description": "Label Tambahkan audio" + }, + "sandboxSaveTitle": { + "message": "Simpan", + "description": "Judul Simpan di halaman editor Sandbox" + }, + "signOutDriveLabel": { + "message": "Keluar dari Drive", + "description": "Label Keluar dari Google Drive" + }, + "savingDriveLabel": { + "message": "Menyimpan...", + "description": "Label Menyimpan ke Google Drive" + }, + "saveDriveButtonTitle": { + "message": "Simpan ke Drive", + "description": "Tombol Simpan ke Google Drive" + }, + "saveDriveButtonDescription": { + "message": "Simpan versi saat ini ke Google Drive", + "description": "Label Simpan ke Google Drive" + }, + "signInDriveLabel": { + "message": "Masuk dan simpan ke Drive", + "description": "Masuk ke Google Drive label" + }, + "sandboxExportTitle": { + "message": "Ekspor", + "description": "Judul Ekspor di halaman editor Sandbox" + }, + "downloadingLabel": { + "message": "Mengunduh...", + "description": "Label Mengunduh" + }, + "downloadWEBMButtonTitle": { + "message": "Unduh sebagai .webm", + "description": "Tombol Unduh WEBM label" + }, + "downloadWEBMButtonDescription": { + "message": "Ekspor video .webm", + "description": "Label Unduh WEBM" + }, + "downloadMP4ButtonTitle": { + "message": "Unduh sebagai .mp4", + "description": "Tombol Unduh MP4 label" + }, + "downloadMP4ButtonDescription": { + "message": "Ekspor video .mp4 (direkomendasikan)", + "description": "Label Unduh MP4" + }, + "downloadGIFButtonTitle": { + "message": "Unduh sebagai .gif", + "description": "Tombol Unduh GIF label" + }, + "downloadGIFButtonDescription": { + "message": "Ekspor GIF (maksimal 30 detik)", + "description": "Label Unduh GIF" + }, + "shareModalSandboxTitle": { + "message": "Bagikan video Anda dengan orang lain", + "description": "Judul modal Bagikan di halaman editor Sandbox" + }, + "shareModalSandboxDescription": { + "message": "Segera hadir! Tinggalkan email Anda untuk tetap diperbarui dan mendapatkan pemberitahuan saat berbagi tersedia.", + "description": "Deskripsi modal Bagikan di halaman editor Sandbox" + }, + "shareModalSandboxButton": { + "message": "Gabung dalam daftar tunggu", + "description": "Kotak masuk modal Bagikan di halaman editor Sandbox" + }, + "shareSandboxButton": { + "message": "Bagikan video", + "description": "Tombol Bagikan di halaman editor Sandbox" + }, + "replaceAudioEditor": { + "message": "Ganti audio yang ada", + "description": "Tombol Ganti audio di editor" + }, + "zoomToPointPopup": { + "message": "Perbesar ke kursor", + "description": "Popup Perbesar ke titik" + }, + "stayInPagePopup": { + "message": "Tetap di halaman saat merekam", + "description": "Popup Tetap di halaman" + }, + "micReminderPopup": { + "message": "Peringatan mikrofon mati", + "description": "Popup Pengingat mikrofon" + }, + "helpPopup": { + "message": "Bantuan", + "description": "Tombol Popup Bantuan" + }, + "pausedRecordingToast": { + "message": "Perekaman dijeda. Tekan tombol putar untuk melanjutkan.", + "description": "Judul modal Perekaman dijeda" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport tidak memiliki izin untuk merekam layar Anda", + "description": "Judul modal Izin" + }, + "chromePermissionsModalDescription": { + "message": "Untuk mengaktifkan perekaman layar, Anda harus memberikan izin kepada MyTechPassportsport untuk menangkap layar Anda ketika diminta.", + "description": "Deskripsi modal Izin" + }, + "chromePermissionsModalAction": { + "message": "Aktifkan perekaman layar", + "description": "Aksi modal Izin" + }, + "chromePermissionsModalCancel": { + "message": "Batal", + "description": "Batal modal Izin" + }, + "micMutedModalTitle": { + "message": "Mikrofon Anda dimatikan", + "description": "Judul modal Mikrofon dimatikan" + }, + "micMutedModalDescription": { + "message": "Untuk menyertakan audio dalam perekaman Anda, Anda perlu mengaktifkan kembali mikrofon Anda. Apakah Anda ingin melanjutkan tanpa audio?", + "description": "Deskripsi modal Mikrofon dimatikan" + }, + "micMutedModalAction": { + "message": "Ya, lanjutkan", + "description": "Lanjutkan modal Mikrofon dimatikan" + }, + "micMutedModalCancel": { + "message": "Batal", + "description": "Batal modal Mikrofon dimatikan" + }, + "setupTitle": { + "message": "Mulailah dengan MyTechPassport dalam tiga langkah sederhana:", + "description": "Judul langkah pengaturan" + }, + "setupStep1Before": { + "message": "1- Klik ikon ", + "description": "Langkah pengaturan 1, sebelum ikon. Diperlukan spasi di akhir." + }, + "setupStep1After": { + "message": " ekstensi", + "description": "Langkah pengaturan 1, setelah ikon. Diperlukan spasi di awal." + }, + "setupStep2Before": { + "message": "2- Tekan ikon ", + "description": "Langkah pengaturan 2, sebelum ikon. Diperlukan spasi di akhir." + }, + "setupStep2After": { + "message": " pin", + "description": "Langkah pengaturan 2, setelah ikon. Diperlukan spasi di awal." + }, + "setupStep3Before": { + "message": "3- Klik ikon ", + "description": "Langkah pengaturan 3, sebelum ikon. Diperlukan spasi di akhir." + }, + "setupStep3After": { + "message": " MyTechPassport untuk memulai", + "description": "Langkah pengaturan 3, setelah ikon. Diperlukan spasi di awal." + }, + "setupCompleteTitle": { + "message": "Keren! Anda sudah siap", + "description": "Judul pengaturan selesai" + }, + "setupCompleteDescription": { + "message": "Anda sekarang dapat mulai merekam di sini atau di tab lain.", + "description": "Deskripsi pengaturan selesai" + }, + "clickHereDrawOnboarding": { + "message": "Klik di sini untuk menggambar", + "description": "Panduan Klik di sini" + }, + "countdownMessage": { + "message": "Tenang. Klik di mana saja untuk menghentikan hitungan mundur.", + "description": "Pesan hitungan mundur" + }, + "sandboxEditorTooSmallInfo": { + "message": "Edit mungkin tidak akurat untuk rentang waktu singkat karena interval antara bingkai.", + "description": "Info tentang editor yang terlalu kecil" + }, + "processingBannerEditor": { + "message": "Video sedang diproses, pemutaran mungkin tidak akurat atau terputus.", + "description": "Banner pemrosesan di editor" + }, + "croppingInfoTitle": { + "message": "Penggunaan alat potong mungkin memerlukan waktu", + "description": "Judul info potong" + }, + "croppingInfoDescription": { + "message": "Upgrade untuk pemrosesan yang lebih cepat", + "description": "Deskripsi info potong" + }, + "micOnToast": { + "message": "Mikrofon diaktifkan", + "description": "Judul toast Mikrofon diaktifkan" + }, + "micOffToast": { + "message": "Mikrofon dimatikan", + "description": "Judul toast Mikrofon dimatikan" + }, + "hideUIAlerts": { + "message": "Sembunyikan notifikasi UI", + "description": "Tombol Sembunyikan notifikasi UI" + }, + "noShowAgain": { + "message": "Jangan tampilkan lagi", + "description": "Tombol Jangan tampilkan lagi" + }, + "toolbarHoverOnly": { + "message": "Sembunyikan toolbar saat tidak digunakan", + "description": "Tombol Hanya tampilkan toolbar saat dihover" + }, + "stopRecording": { + "message": "Hentikan perekaman", + "description": "Tombol Hentikan perekaman di layar perekaman" + }, + "updateAnnouncementTitle": { + "message": "Selamat datang di MyTechPassport yang baru!", + "description": "Judul pengumuman pembaruan untuk pengguna yang sudah ada" + }, + "updateAnnouncementDescription": { + "message": "Kami memperkenalkan tampilan baru dan banyak fitur menarik, tetapi jangan khawatir, ini masih merupakan perluasan gratis, pribadi, dan open source yang sama yang Anda kenal dan cintai.", + "description": "Deskripsi pengumuman pembaruan untuk pengguna yang sudah ada" + }, + "updateAnnouncementLearnMore": { + "message": "Pelajari lebih lanjut tentang pembaruan.", + "description": "Tautan pelajari lebih lanjut pengumuman pembaruan untuk pengguna yang sudah ada" + }, + "updateAnnouncementButton": { + "message": "Mulai sekarang", + "description": "Tombol pengumuman pembaruan untuk pengguna yang sudah ada" + }, + "streamErrorModalTitle": { + "message": "Kesalahan saat memulai perekaman", + "description": "Judul modal kesalahan stream" + }, + "streamErrorModalDescription": { + "message": "Sepertinya ada kesalahan saat memulai perekaman. Restart browser Anda dan coba lagi. Jika masalah masih berlanjut, silakan hubungi kami di support@MyTechPassport.io.", + "description": "Deskripsi modal kesalahan stream" + }, + "highestQuality": { + "message": "Kualitas Tertinggi", + "description": "Label untuk mengganti kualitas tertinggi di popup" + }, + "restoreRecording": { + "message": "Kembalikan Rekaman Terakhir", + "description": "Tombol untuk mengembalikan rekaman terakhir di popup" + }, + "havingIssuesButton": { + "message": "Mengalami masalah?", + "description": "Tombol masalah di editor" + }, + "havingIssuesModalTitle": { + "message": "Tidak dapat melihat rekaman Anda?", + "description": "Judul modal masalah di editor" + }, + "havingIssuesModalDescription": { + "message": "Jika Anda telah menyelesaikan rekaman Anda dan mendapati diri Anda berada di halaman ini tanpa melihat video Anda, Anda dapat mencoba mengunduh data video mentah jika tersedia. Anda juga dapat menghubungi kami dan mengirimkan laporan bug.", + "description": "Deskripsi modal masalah di editor" + }, + "havingIssuesModalButton": { + "message": "Unduh data video mentah", + "description": "Tombol modal masalah di editor" + }, + "havingIssuesModalButton2": { + "message": "Laporkan bug", + "description": "Tombol kedua dalam modal masalah di editor" + }, + "noRecordingFound": { + "message": "Tidak ada rekaman yang ditemukan, maaf :(", + "description": "Peringatan tidak ada rekaman ditemukan di editor" + }, + "memoryLimitTitle": { + "message": "Batas Memori Tercapai", + "description": "Judul Batas Memori Tercapai" + }, + "memoryLimitDescription": { + "message": "Perangkat Anda telah kehabisan memori untuk merekam, sehingga perekaman telah berhenti secara otomatis. Jika Anda ingin merekam lebih lama, Anda dapat mencoba mengurangi kualitas video atau membersihkan beberapa ruang pada perangkat Anda.", + "description": "Deskripsi Batas Memori Tercapai" + }, + "understoodButton": { + "message": "Dimengerti", + "description": "Tombol Dimengerti" + }, + "notEnoughSpaceTitle": { + "message": "Ruang Tidak Cukup", + "description": "Judul Ruang Tidak Cukup" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassport memerlukan setidaknya 1 GB ruang kosong untuk merekam. Silakan mengosongkan beberapa ruang pada perangkat Anda dan coba lagi.", + "description": "Deskripsi Ruang Tidak Cukup" + }, + "clearSpaceButton": { + "message": "Hapus Rekaman Sebelumnya", + "description": "Tombol Hapus Rekaman Sebelumnya" + }, + "sandboxAdvancedTitle": { + "message": "Lanjutan", + "description": "Bagian Lanjutan pada halaman editor sandbox" + }, + "rawRecordingButtonTitle": { + "message": "Unduh berkas video mentah", + "description": "Tombol Unduh berkas perekaman mentah" + }, + "rawRecordingButtonDescription": { + "message": "Ekspor data perekaman asli", + "description": "Label Unduh berkas perekaman mentah" + }, + "troubleshootButtonTitle": { + "message": "Dapatkan bantuan untuk perekaman Anda", + "description": "Tombol Penyelesaian Masalah" + }, + "troubleShootButtonDescription": { + "message": "Pulihkan video Anda dan selesaikan masalah lainnya", + "description": "Label Penyelesaian Masalah" + }, + "rawRecordingModalTitle": { + "message": "Unduh berkas video mentah", + "description": "Judul modal berkas perekaman mentah" + }, + "rawRecordingModalDescription": { + "message": "Berkas video mentah adalah berkas video asli yang direkam oleh MyTechPassport. Video ini tidak diproses atau diedit, sehingga mungkin sangat besar dan mungkin tidak dapat diputar di semua perangkat. Jika Anda mengalami masalah dengan video yang diproses, Anda dapat menggunakan berkas ini untuk memulihkan video Anda.", + "description": "Deskripsi modal berkas perekaman mentah" + }, + "rawRecordingModalButton": { + "message": "Unduh", + "description": "Tombol modal berkas perekaman mentah" + }, + "troubleshootModalTitle": { + "message": "Unduh informasi sistem dan data video untuk penyelesaian masalah", + "description": "Judul modal Penyelesaian Masalah" + }, + "troubleshootModalDescription": { + "message": "Setelah mengunduh, kirim berkas ini ke support@MyTechPassport.io dengan informasi relevan. Kami akan menggunakan data ini untuk membantu Anda menyelesaikan masalah dengan ekstensi dan memulihkan video Anda jika memungkinkan.", + "description": "Deskripsi modal Penyelesaian Masalah" + }, + "troubleshootModalButton": { + "message": "Unduh", + "description": "Tombol modal Penyelesaian Masalah" + }, + "overLimitModalTitle": { + "message": "Video terlalu panjang untuk diproses di perangkat Anda", + "description": "Judul modal batas lebih dari 5 menit" + }, + "overLimitModalDescription": { + "message": "Karena MyTechPassportsport sepenuhnya privat dan berjalan secara lokal, ia dibatasi oleh perangkat keras perangkat Anda. Memproses video sepanjang ini akan memakan waktu terlalu lama dan sangat intensif dalam penggunaan sumber daya. Jangan khawatir, Anda masih dapat mengunduh file WEBM atau rekaman mentah, tetapi pengeditan dan ekspor ke MP4 tidak tersedia. Namun demikian, Anda masih dapat mencoba memproses video ini jika Anda memahami risikonya.", + "description": "Deskripsi modal batas lebih dari 5 menit" + }, + "overLimitModalButton": { + "message": "Saya mengerti risikonya, coba saja", + "description": "Tombol modal batas lebih dari 5 menit" + }, + "overLimitModalLearnMore": { + "message": "Pelajari lebih lanjut tentang pengolahan video panjang.", + "description": "Tautan 'Pelajari lebih lanjut' dalam modal batas lebih dari 5 menit dengan titik" + }, + + "recoveryModeTitle": { + "message": "Mode Pemulihan", + "description": "Judul Mode Pemulihan" + }, + + "downloadForTroubleshootingOption": { + "message": "Unduh data untuk perbaikan masalah", + "description": "Pilihan unduhan untuk perbaikan masalah" + }, + "getHelpNav": { + "message": "Pusat Bantuan", + "description": "Elemen Navigasi Bantuan" + }, + "audioWarningTitle": { + "message": "Merekam Audio dari Halaman", + "description": "Judul Peringatan Audio" + }, + "audioWarningDescription": { + "message": "Untuk merekam audio dari halaman ini, Anda harus menggunakan opsi '$tab$'.", + "description": "Deskripsi Peringatan Audio", + "placeholders": { + "tab": { + "content": "$1", + "example": "Area Tab" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Ekstensi Tidak Didukung di Halaman", + "description": "Judul Ekstensi Tidak Didukung di Tab" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport tidak mendukung di tab sebelumnya Anda. Meskipun begitu, Anda masih bisa memulai perekaman di sini dan kemudian beralih ke tab lain, tetapi kamera dan toolbar Anda tidak akan terlihat.", + "description": "Deskripsi Ekstensi Tidak Didukung di Tab" + }, + "backupsTitle": { + "message": "Konfigurasi Cadangan Lokal untuk Rekaman MyTechPassport Anda", + "description": "Judul Cadangan" + }, + "backupsDescription1": { + "message": "Simpan salinan dari semua rekaman yang Anda buat. Jika Anda tidak mengatur cadangan, rekaman Anda hanya akan disimpan saat Anda memutuskan untuk mengunduhnya.", + "description": "Deskripsi Cadangan" + }, + "backupsDescription2": { + "message": "Anda mungkin perlu membuat folder baru terlebih dahulu jika Anda mencoba menyimpannya di folder seperti 'Unduhan' atau folder sistem lainnya.", + "description": "Deskripsi Cadangan" + }, + "backupsSelectFolder": { + "message": "Pilih Folder", + "description": "Tombol Pilih Folder" + }, + "backupsNotNow": { + "message": "Tidak Sekarang", + "description": "Tombol Tidak Sekarang" + }, + "backupsOnTitle": { + "message": "Rekaman Anda Sedang Disinkronkan Secara Lokal", + "description": "Judul Cadangan Aktif" + }, + "backupsOnDescription": { + "message": "Untuk menghindari permintaan izin setiap kali Anda merekam, kami sarankan Anda menjaga tab ini tetap terbuka.", + "description": "Deskripsi Cadangan Aktif" + }, + "backupsClose": { + "message": "Tutup Tab Anyway", + "description": "Tombol Tutup Tab Anyway" + }, + "backupsStop": { + "message": "Hentikan Semua Cadangan Rekaman", + "description": "Tombol Hentikan Cadangan" + }, + "backupsConfirmTitle": { + "message": "Mohon Konfirmasi Kembali Akses ke Folder Cadangan Lokal MyTechPassport Anda", + "description": "Judul Konfirmasi Cadangan" + }, + "backupsConfirmDescription": { + "message": "Maaf, tetapi kami perlu izin Anda sekali lagi untuk terus membuat salinan lokal dari rekaman Anda. Sayangnya, kami akan perlu bertanya setiap kali Anda menutup tab ini, yang bisa terjadi jika Anda menutup browser atau me-restart komputer Anda.", + "description": "Deskripsi Konfirmasi Cadangan" + }, + "backupsConfirmAllow": { + "message": "Izinkan MyTechPassport untuk Terus Membuat Cadangan Rekaman", + "description": "Tombol Izinkan dalam Konfirmasi Cadangan" + }, + "backupsToggle": { + "message": "Membuat Cadangan Rekaman", + "description": "Label Aktifkan/Nonaktifkan Cadangan" + }, + "backupPermissionFailTitle": { + "message": "Izin Tidak Diberikan untuk Membuat Cadangan Rekaman", + "description": "Judul Gagal Izin Cadangan" + }, + "backupPermissionFailDescription": { + "message": "Anda tidak memilih folder untuk membuat salinan lokal dari rekaman Anda. Bergantung pada versi browser atau sistem operasi Anda, Anda mungkin diminta untuk memilih folder setiap kali Anda mulai merekam. Anda dapat mencoba lagi atau menonaktifkan cadangan sepenuhnya jika Anda tidak ingin memberikan izin berkali-kali.", + "description": "Deskripsi Gagal Izin Cadangan" + }, + "recordAudioWarningMacTitle": { + "message": "Merekam Audio dari Komputer", + "description": "Judul Peringatan Audio untuk macOS" + }, + "recordAudioWarningMacDescription": { + "message": "Di macOS, Anda hanya dapat merekam audio dari tab. Pilih opsi 'Tab Chrome' dan pastikan 'Bagikan juga audio tab' diaktifkan.", + "description": "Deskripsi Peringatan Audio untuk macOS" + }, + "recordAudioWarningOtherTitle": { + "message": "Merekam Audio dari Komputer", + "description": "Judul Peringatan Audio untuk Sistem Lainnya" + }, + "recordAudioWarningOtherDescription": { + "message": "Pastikan Anda mengaktifkan opsi 'Bagikan audio sistem' jika Anda ingin merekam audio dari komputer. Jika Anda tidak melihat opsi ini, coba perbarui Chrome atau beralih ke opsi merekam tab.", + "description": "Deskripsi Peringatan Audio untuk Sistem Lainnya" + }, + + "maxResolutionLabel": { + "message": "Resolusi Maksimum", + "description": "Label resolusi maksimum dalam menu pengaturan" + }, + "maxFPSLabel": { + "message": "FPS Maksimum", + "description": "Label FPS maksimum dalam menu pengaturan" + }, + + "notEnoughRAM": { + "message": "Tidak cukup RAM", + "description": "Label 'Tidak cukup RAM' dalam menu pengaturan" + }, + "resizeWindowLabel": { + "message": "Ubah Ukuran Jendela", + "description": "Label Ubah Ukuran Jendela di menu pengaturan" + }, + "screenTooSmallTooltip": { + "message": "Layar terlalu kecil untuk resolusi ini", + "description": "Tooltip Layar terlalu kecil di menu pengaturan" + }, + "maxResolutionTooltip": { + "message": "Tidak dapat merekam pada resolusi ini di perangkat Anda", + "description": "Tooltip Resolusi maksimum di menu pengaturan" + }, + "permissionsModalReview": { + "message": "Ulasan Izin", + "description": "Tombol Ulasan Izin" + } +} diff --git a/build/_locales/it/messages.json b/build/_locales/it/messages.json new file mode 100644 index 0000000..ebe9fe7 --- /dev/null +++ b/build/_locales/it/messages.json @@ -0,0 +1,1026 @@ +{ + "extName": { + "message": "MyTechPassport - Registra lo schermo e annota", + "description": "Nome dell'estensione" + }, + "extDesc": { + "message": "La migliore registrazione dello schermo gratuita per Chrome senza limiti. Cattura, disegna, ingrandisci, sfoca, modifica video e altro ancora, senza la necessità di registrazione e completamente privata.", + "description": "Descrizione dell'estensione" + }, + "recordTab": { + "message": "Registra", + "description": "Etichetta della scheda Registra nel menu a discesa" + }, + "videosTab": { + "message": "Tus videos", + "description": "Etichetta della scheda I tuoi video nel menu a discesa" + }, + "screenType": { + "message": "Schermo", + "description": "Etichetta del tipo di registrazione dello schermo nel menu a discesa" + }, + "tabType": { + "message": "Area", + "description": "Etichetta del tipo di registrazione dell'area della scheda nel menu a discesa" + }, + "cameraType": { + "message": "Fotocamera", + "description": "Etichetta del tipo di registrazione della fotocamera nel menu a discesa" + }, + "mockupType": { + "message": "Mockup", + "description": "Etichetta del tipo di registrazione del mockup nel menu a discesa" + }, + "customAreaRecordingDisabledTitle": { + "message": "Registrazione area personalizzata disabilitata", + "description": "Titolo del messaggio di avviso per la registrazione dell'area personalizzata disabilitata nelle versioni di Chrome precedenti alla 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Aggiorna Chrome alla versione 110+", + "description": "Descrizione del messaggio di avviso per la registrazione dell'area personalizzata disabilitata nelle versioni di Chrome precedenti alla 104" + }, + "customAreaRecordingDisabledAction": { + "message": "Aggiorna", + "description": "Azione del messaggio di avviso per la registrazione dell'area personalizzata disabilitata nelle versioni di Chrome precedenti alla 104" + }, + "permissionsModalTitle": { + "message": "Verifica i tuoi permessi", + "description": "Titolo del modulo di avviso dei permessi per fotocamera/microfono" + }, + "permissionsModalDescription": { + "message": "Sembra che MyTechPassport non possa accedere alla tua fotocamera o al tuo microfono. Consenti l'accesso facendo clic sull'icona della fotocamera nella barra degli indirizzi.", + "description": "Descrizione del modulo di avviso dei permessi per fotocamera/microfono" + }, + "permissionsModalDismiss": { + "message": "Annulla", + "description": "Pulsante di annullamento del modulo di avviso dei permessi per fotocamera/microfono" + }, + "allowCameraAccessButton": { + "message": "Consenti accesso alla fotocamera", + "description": "Pulsante per consentire l'accesso alla fotocamera" + }, + "allowMicrophoneAccessButton": { + "message": "Consenti accesso al microfono", + "description": "Pulsante per consentire l'accesso al microfono" + }, + "pushToTalkLabel": { + "message": "Premi per parlare", + "description": "Etichetta dell'interruttore di premi per parlare" + }, + "customAreaLabel": { + "message": "Imposta un'area di registrazione", + "description": "Etichetta dell'interruttore dell'area personalizzata" + }, + "flipCameraLabel": { + "message": "Rovescia la fotocamera", + "description": "Etichetta dell'interruttore per rovesciare la fotocamera" + }, + "backgroundEffectsLabel": { + "message": "Effetti di sfondo", + "description": "Etichetta dell'interruttore per gli effetti di sfondo" + }, + "recordButtonLabel": { + "message": "Avvia la registrazione", + "description": "Etichetta del pulsante di registrazione" + }, + "recordButtonNoCameraLabel": { + "message": "Seleziona una fotocamera per registrare", + "description": "Etichetta del pulsante di registrazione quando è in modalità fotocamera e non è stata selezionata alcuna fotocamera" + }, + "recordButtonInProgressLabel": { + "message": "Registrazione in corso...", + "description": "Etichetta del pulsante di registrazione in corso" + }, + "showMoreOptionsLabel": { + "message": "Mostra più opzioni", + "description": "Etichetta per mostrare più opzioni" + }, + + "systemAudioLabel": { + "message": "Includi l'audio di sistema", + "description": "Etichetta audio di sistema/etichetta tab" + }, + "hideToolbarLabel": { + "message": "Nascondi la barra degli strumenti", + "description": "Etichetta per nascondere la barra degli strumenti" + }, + "countdownLabel": { + "message": "Conto alla rovescia", + "description": "Etichetta del conto alla rovescia" + }, + "alarmLabel": { + "message": "Imposta il limite di tempo", + "description": "Etichetta dell'allarme" + }, + "blurTypeLabel": { + "message": "Sfocatura", + "description": "Etichetta per il tipo di sfocatura dello sfondo" + }, + "noneDropdownLabel": { + "message": "Nessuno", + "description": "Nessun dispositivo selezionato" + }, + "noCameraDropdownLabel": { + "message": "Nessuna fotocamera", + "description": "Nessuna fotocamera selezionata" + }, + "noMicrophoneDropdownLabel": { + "message": "Nessun microfono", + "description": "Nessun microfono selezionato" + }, + "selectSourceDropdownPlaceholder": { + "message": "Seleziona una sorgente", + "description": "Segnaposto per la selezione della sorgente" + }, + "offLabel": { + "message": "Off", + "description": "Etichetta per disattivare nel menu a discesa" + }, + "regionWidthLabel": { + "message": "Larghezza", + "description": "Etichetta per la larghezza della regione" + }, + "regionHeightLabel": { + "message": "Altezza", + "description": "Etichetta per l'altezza della regione" + }, + "addImageToastTitle": { + "message": "Clicca per inserire l'immagine", + "description": "Messaggio a comparsa al momento dell'inserimento di una nuova immagine" + }, + "finishRecordingTooltip": { + "message": "Termina la registrazione", + "description": "Suggerimento per terminare la registrazione" + }, + "restartRecordingTooltip": { + "message": "Ricomincia la registrazione", + "description": "Suggerimento per ricominciare la registrazione" + }, + "pauseRecordingTooltip": { + "message": "Mettila in pausa", + "description": "Suggerimento per mettere in pausa la registrazione" + }, + "resumeRecordingTooltip": { + "message": "Riprendi la registrazione", + "description": "Suggerimento per riprendere la registrazione" + }, + "cancelRecordingTooltip": { + "message": "Annulla la registrazione", + "description": "Suggerimento per annullare la registrazione" + }, + "toggleDrawingToolsTooltip": { + "message": "Strumenti di disegno", + "description": "Suggerimento per attivare/disattivare gli strumenti di disegno" + }, + "toggleBlurToolTooltip": { + "message": "Strumento di sfocatura", + "description": "Suggerimento per attivare/disattivare lo strumento di sfocatura" + }, + "toggleCursorOptionsTooltip": { + "message": "Opzioni del cursore", + "description": "Suggerimento per attivare/disattivare le opzioni del cursore" + }, + "disableCameraTooltip": { + "message": "Disattiva la fotocamera", + "description": "Suggerimento per disattivare la fotocamera" + }, + "enableCameraTooltip": { + "message": "Attiva la fotocamera", + "description": "Suggerimento per attivare la fotocamera" + }, + "noCameraPermissionsTooltip": { + "message": "Nessun permesso per la fotocamera", + "description": "Suggerimento per l'assenza di permessi per la fotocamera" + }, + "disableMicrophoneTooltip": { + "message": "Disattiva il microfono", + "description": "Suggerimento per disattivare il microfono" + }, + "enableMicrophoneTooltip": { + "message": "Attiva il microfono", + "description": "Suggerimento per attivare il microfono" + }, + "noMicrophonePermissionsTooltip": { + "message": "Nessun permesso per il microfono", + "description": "Suggerimento per l'assenza di permessi per il microfono" + }, + "selectToolTooltip": { + "message": "Strumento di selezione", + "description": "Suggerimento per selezionare uno strumento" + }, + "penToolTooltip": { + "message": "Penna", + "description": "Suggerimento per lo strumento penna" + }, + "highlighterToolTooltip": { + "message": "Evidenziatore", + "description": "Suggerimento per lo strumento evidenziatore" + }, + "eraserToolTooltip": { + "message": "Cancella", + "description": "Suggerimento per lo strumento cancella" + }, + "textToolTooltip": { + "message": "Testo", + "description": "Suggerimento per lo strumento testo" + }, + "shapeToolTooltip": { + "message": "Forme", + "description": "Suggerimento per lo strumento forme" + }, + "arrowToolTooltip": { + "message": "Freccia", + "description": "Suggerimento per lo strumento freccia" + }, + "imageToolTooltip": { + "message": "Immagini", + "description": "Suggerimento per lo strumento immagini" + }, + "undoTooltip": { + "message": "Annulla", + "description": "Suggerimento per annullare" + }, + "redoTooltip": { + "message": "Rifare", + "description": "Suggerimento per rifare" + }, + "clearCanvasTooltip": { + "message": "Cancella tela", + "description": "Suggerimento per cancellare la tela" + }, + "moreColorsTooltip": { + "message": "Più colori", + "description": "Suggerimento per più colori" + }, + "thickStrokeTooltip": { + "message": "Pennello spesso", + "description": "Suggerimento per pennello spesso" + }, + "mediumStrokeTooltip": { + "message": "Pennello medio", + "description": "Suggerimento per pennello medio" + }, + "thinStrokeTooltip": { + "message": "Pennello sottile", + "description": "Suggerimento per pennello sottile" + }, + "togglePictureinPictureModeTooltip": { + "message": "Modalità Picture-in-Picture (PIP)", + "description": "Suggerimento per attivare la modalità Picture-in-Picture (PIP)" + }, + "toggleFillTooltip": { + "message": "Attiva riempimento", + "description": "Suggerimento per attivare il riempimento" + }, + "drawingModeToast": { + "message": "Modalità disegno", + "description": "Messaggio di avviso per la modalità disegno" + }, + "blurModeToast": { + "message": "Modalità sfocatura", + "description": "Messaggio di avviso per la modalità sfocatura" + }, + "clearBlurredElementsTooltip": { + "message": "Cancella tutti gli elementi sfocati", + "description": "Suggerimento per cancellare tutti gli elementi sfocati" + }, + "highlightClicksTooltip": { + "message": "Evidenzia clic", + "description": "Suggerimento per evidenziare clic" + }, + "highlightCursorTooltip": { + "message": "Evidenzia cursore", + "description": "Suggerimento per evidenziare il cursore" + }, + "spotlightCursorTooltip": { + "message": "Punto focale sul cursore", + "description": "Suggerimento per il punto focale sul cursore" + }, + "permissionsModalNoShowAgain": { + "message": "Non mostrare più", + "description": "Pulsante per non mostrare più nel modalità di autorizzazioni" + }, + "restartModalTitle": { + "message": "Sei sicuro di voler riavviare la registrazione?", + "description": "Titolo del modalità di riavvio registrazione" + }, + "restartModalDescription": { + "message": "Perderai tutto il tuo progresso.", + "description": "Descrizione del modalità di riavvio registrazione" + }, + "restartModalRestart": { + "message": "Riavvia registrazione", + "description": "Pulsante per riavviare la registrazione nel modalità" + }, + "restartModalResume": { + "message": "Riprendi registrazione", + "description": "Pulsante per riprendere la registrazione nel modalità" + }, + "discardModalTitle": { + "message": "Sei sicuro di voler scartare la registrazione?", + "description": "Titolo del modalità di scarto registrazione" + }, + "discardModalDescription": { + "message": "Perderai tutto il tuo progresso.", + "description": "Descrizione del modalità di scarto registrazione" + }, + "discardModalDiscard": { + "message": "Scarta registrazione", + "description": "Pulsante per scartare la registrazione nel modalità" + }, + "discardModalResume": { + "message": "Riprendi registrazione", + "description": "Pulsante per riprendere la registrazione nel modalità" + }, + "recorderSelectTitle": { + "message": "Scegli cosa registrare", + "description": "Titolo nella pagina di registrazione" + }, + "recorderSelectProgressTitle": { + "message": "Registrazione in corso...", + "description": "Titolo nella pagina di registrazione durante la registrazione" + }, + "recorderSelectDescription": { + "message": "Tieni aperta questa scheda. Si chiuderà una volta che il tuo video sarà salvato.", + "description": "Descrizione nella pagina di registrazione" + }, + "sandboxProgressTitle": { + "message": "Preparazione registrazione...", + "description": "Titolo nella pagina di registrazione mentre si sta registrando/salvando" + }, + "sandboxProgressDescription": { + "message": "Lascia aperta questa scheda. Si aggiornerà con il tuo video una volta pronto.", + "description": "Descrizione nella pagina di registrazione mentre si sta registrando/salvando" + }, + "sandboxEditorMainTitle": { + "message": "Editor", + "description": "Titolo nella navigazione della pagina dell'editor di prova" + }, + "sandboxEditorCancelButton": { + "message": "Annulla", + "description": "Pulsante per annullare nella pagina dell'editor di prova" + }, + "sandboxEditorRevertButton": { + "message": "Ripristina originale", + "description": "Pulsante per ripristinare nella pagina dell'editor di prova" + }, + "sandboxEditorResetButton": { + "message": "Reimposta", + "description": "Pulsante per reimpostare nella pagina dell'editor di prova" + }, + "sandboxEditorSaveButton": { + "message": "Salva modifiche", + "description": "Pulsante per salvare nella pagina dell'editor di prova" + }, + "sandboxEditorSaveProgressButton": { + "message": "Salvataggio...", + "description": "Pulsante per salvare nella pagina dell'editor di prova mentre si sta salvando" + }, + "sandboxAudioDragAndDrop": { + "message": "Trascina il tuo file audio", + "description": "Trascina e rilascia il file audio nella pagina dell'editor di prova" + }, + "sandboxAudioOrBrowse": { + "message": "O fai clic per cercare", + "description": "O fai clic per cercare il file audio nella pagina dell'editor di prova" + }, + "sandboxAudioSettingsTitle": { + "message": "Impostazioni audio", + "description": "Titolo delle impostazioni audio nella pagina dell'editor di prova" + }, + "sandboxAudioVolumeLabel": { + "message": "Volume", + "description": "Etichetta del volume audio nella pagina dell'editor di prova" + }, + "sandboxAudioUpdateButton": { + "message": "Applica", + "description": "Pulsante di aggiornamento audio nella pagina dell'editor di test" + }, + "sandboxCropTitle": { + "message": "Taglia", + "description": "Titolo del ritaglio nella pagina dell'editor di test" + }, + "widthLabel": { + "message": "Larghezza", + "description": "Etichetta larghezza per le proprietà" + }, + "heightLabel": { + "message": "Altezza", + "description": "Etichetta altezza per le proprietà" + }, + "leftLabel": { + "message": "Sinistra", + "description": "Etichetta sinistra per le proprietà" + }, + "topLabel": { + "message": "In alto", + "description": "Etichetta in alto per le proprietà" + }, + "sandboxEditorTrimInfo": { + "message": "Trascina le maniglie e usa i pulsanti a sinistra per modificare la sezione selezionata.", + "description": "Informazioni sul ritaglio nell'editor di test" + }, + "sandboxEditorTrimButton": { + "message": "Taglia video", + "description": "Pulsante di ritaglio nell'editor di test" + }, + "sandboxEditorTrimProgressButton": { + "message": "Tagliando...", + "description": "Pulsante di ritaglio nell'editor di test durante il ritaglio" + }, + "sandboxEditorCutButton": { + "message": "Rimuovi sezione", + "description": "Pulsante di taglio nell'editor di test" + }, + "sandboxEditorCutProgressButton": { + "message": "Rimozione...", + "description": "Pulsante di taglio nell'editor di test durante il taglio" + }, + "sandboxEditorMuteButton": { + "message": "Silenzia audio", + "description": "Pulsante di silenziamento nell'editor di test" + }, + "sandboxEditorMuteProgressButton": { + "message": "Silenzio...", + "description": "Pulsante di silenziamento nell'editor di test durante il silenziamento" + }, + "learnMoreDot": { + "message": "Scopri di più.", + "description": "Scopri di più con un punto" + }, + "undoLabel": { + "message": "Annulla", + "description": "Etichetta annulla" + }, + "redoLabel": { + "message": "Ripeti", + "description": "Etichetta ripeti" + }, + "leaveReview": { + "message": "Lascia una recensione", + "description": "Pulsante per lasciare una recensione" + }, + "followForUpdates": { + "message": "Rimani informato", + "description": "Pulsante per seguire per gli aggiornamenti" + }, + "offlineLabelTitle": { + "message": "Offline", + "description": "Etichetta offline" + }, + "offlineLabelDescription": { + "message": "Alcune funzioni non sono disponibili ", + "description": "Descrizione dell'etichetta offline" + }, + "offlineLabelTryAgain": { + "message": "Riprova", + "description": "Pulsante per riprovare dell'etichetta offline" + }, + "updateChromeLabelTitle": { + "message": "Chrome deve essere aggiornato", + "description": "Etichetta per aggiornare Chrome" + }, + "updateChromeLabelDescription": { + "message": "Aggiorna per accedere a più funzionalità", + "description": "Descrizione dell'etichetta per aggiornare Chrome" + }, + "learnMoreLabel": { + "message": "Scopri di più", + "description": "Pulsante per saperne di più" + }, + "overLimitLabelTitle": { + "message": "Video troppo lungo per essere elaborato localmente", + "description": "Etichetta di limite superiore a 5 minuti nell'editor" + }, + "overLimitLabelDescription": { + "message": "Modifica ed esportazione in formato MP4 non disponibili", + "description": "Descrizione del limite superiore a 5 minuti nell'editor" + }, + "videoProcessingLabelTitle": { + "message": "Il video è in fase di elaborazione...", + "description": "Etichetta per l'elaborazione video nell'editor" + }, + "videoProcessingLabelDescription": { + "message": "Abbonati per modificare video più rapidamente", + "description": "Descrizione dell'elaborazione video nell'editor" + }, + "sandboxEditTitle": { + "message": "Modifica", + "description": "Titolo della modifica nella pagina dell'editor di test" + }, + "noConnectionLabel": { + "message": "Nessuna connessione", + "description": "Etichetta nessuna connessione" + }, + "notAvailableLabel": { + "message": "Non disponibile", + "description": "Etichetta non disponibile" + }, + "editButtonTitle": { + "message": "Modifica video", + "description": "Etichetta del pulsante di ritaglio" + }, + "editButtonDescription": { + "message": "Taglia o silenzia il video", + "description": "Etichetta del ritaglio" + }, + "preparingLabel": { + "message": "Preparazione del video, attendere...", + "description": "Etichetta preparazione" + }, + "cropButtonTitle": { + "message": "Taglia", + "description": "Etichetta del pulsante di ritaglio" + }, + "cropButtonDescription": { + "message": "Taglia e ridimensiona il video", + "description": "Etichetta del ritaglio" + }, + "addAudioButtonTitle": { + "message": "Aggiungi audio", + "description": "Etichetta del pulsante per aggiungere audio" + }, + "addAudioButtonDescription": { + "message": "Carica il tuo audio per aggiungerlo al video", + "description": "Etichetta per aggiungere audio" + }, + "sandboxSaveTitle": { + "message": "Integrazioni", + "description": "Titolo del salvataggio nella pagina dell'editor di test" + }, + "signOutDriveLabel": { + "message": "Esci da Google Drive", + "description": "Etichetta esci da Google Drive" + }, + "savingDriveLabel": { + "message": "Salvataggio...", + "description": "Etichetta salvataggio su Google Drive" + }, + "saveDriveButtonTitle": { + "message": "Salva su Drive", + "description": "Pulsante di salvataggio su Google Drive" + }, + "saveDriveButtonDescription": { + "message": "Salva la versione attuale su Google Drive", + "description": "Etichetta per il salvataggio su Google Drive" + }, + "signInDriveLabel": { + "message": "Accedi e salva su Drive", + "description": "Etichetta per l'accesso a Google Drive" + }, + "sandboxExportTitle": { + "message": "Esporta", + "description": "Titolo dell'esportazione nella pagina dell'editor di prova" + }, + "downloadingLabel": { + "message": "Scaricando...", + "description": "Etichetta di download" + }, + "downloadWEBMButtonTitle": { + "message": "Scarica come .webm", + "description": "Pulsante di download WEBM" + }, + "downloadWEBMButtonDescription": { + "message": "Esporta un video .webm", + "description": "Etichetta di download WEBM" + }, + "downloadMP4ButtonTitle": { + "message": "Scarica come .mp4", + "description": "Pulsante di download MP4" + }, + "downloadMP4ButtonDescription": { + "message": "Esporta un video .mp4 (consigliato)", + "description": "Etichetta di download MP4" + }, + "downloadGIFButtonTitle": { + "message": "Scarica come .gif", + "description": "Pulsante di download GIF" + }, + "downloadGIFButtonDescription": { + "message": "Esporta un GIF (massimo 30 secondi)", + "description": "Etichetta di download GIF" + }, + "shareModalSandboxTitle": { + "message": "Condividi i tuoi video con un link", + "description": "Titolo del modalità di condivisione nella pagina dell'editor di prova" + }, + "shareModalSandboxDescription": { + "message": "Prossimamente! Lascia la tua email per rimanere aggiornato e ricevere notifiche quando sarà disponibile.", + "description": "Descrizione del modalità di condivisione nella pagina dell'editor di prova" + }, + "shareModalSandboxButton": { + "message": "Iscriviti alla lista d'attesa", + "description": "Spazio riservato per l'email nel modalità di condivisione nella pagina dell'editor di prova" + }, + "shareSandboxButton": { + "message": "Condividi video", + "description": "Pulsante di condivisione nella pagina dell'editor di prova" + }, + "replaceAudioEditor": { + "message": "Sostituisci l'audio esistente", + "description": "Pulsante di sostituzione dell'audio nell'editor" + }, + "zoomToPointPopup": { + "message": "Zoom sul cursore", + "description": "Popup di zoom sul punto" + }, + "stayInPagePopup": { + "message": "Rimani nella pagina durante la registrazione", + "description": "Popup di permanenza nella pagina" + }, + "micReminderPopup": { + "message": "Mostra un avviso se il microfono è spento", + "description": "Popup di promemoria del microfono" + }, + "helpPopup": { + "message": "Aiuto", + "description": "Pulsante di popup di aiuto" + }, + "pausedRecordingToast": { + "message": "Registrazione in pausa. Premi il pulsante di riproduzione per continuare.", + "description": "Titolo del modalità di registrazione in pausa" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport non ha il permesso di registrare il tuo schermo", + "description": "Titolo del modalità di autorizzazioni" + }, + "chromePermissionsModalDescription": { + "message": "Per abilitare la registrazione dello schermo, devi concedere le autorizzazioni a MyTechPassport.", + "description": "Descrizione del modalità di autorizzazioni" + }, + "chromePermissionsModalAction": { + "message": "Abilita la registrazione dello schermo", + "description": "Azione del modalità di autorizzazioni" + }, + "chromePermissionsModalCancel": { + "message": "Annulla", + "description": "Annulla del modalità di autorizzazioni" + }, + "micMutedModalTitle": { + "message": "Il tuo microfono è spento", + "description": "Titolo del modalità di microfono spento" + }, + "micMutedModalDescription": { + "message": "Per includere l'audio nella tua registrazione, devi attivare il tuo microfono. Vuoi continuare senza audio?", + "description": "Descrizione del modalità di microfono spento" + }, + "micMutedModalAction": { + "message": "Sì, continua", + "description": "Continua del modalità di microfono spento" + }, + "micMutedModalCancel": { + "message": "Annulla", + "description": "Annulla del modalità di microfono spento" + }, + "setupTitle": { + "message": "Inizia a usare MyTechPassport con tre semplici passaggi:", + "description": "Titolo dei passaggi di configurazione" + }, + "setupStep1Before": { + "message": "1- Fai clic sull'icona ", + "description": "Passaggio 1 di configurazione, prima dell'icona. Richiede uno spazio alla fine." + }, + "setupStep1After": { + "message": " delle estensioni", + "description": "Passaggio 1 di configurazione, dopo l'icona. Richiede uno spazio all'inizio." + }, + "setupStep2Before": { + "message": "2- Premi l'icona ", + "description": "Passaggio 2 di configurazione, prima dell'icona. Richiede uno spazio alla fine." + }, + "setupStep2After": { + "message": " del pin", + "description": "Passaggio 2 di configurazione, dopo l'icona. Richiede uno spazio all'inizio." + }, + "setupStep3Before": { + "message": "3- Fai clic sull'icona di MyTechPassportsport", + "description": "Passaggio 3 di configurazione, prima dell'icona. Richiede uno spazio alla fine." + }, + "setupStep3After": { + "message": " per iniziare", + "description": "Passaggio 3 di configurazione, dopo l'icona. Richiede uno spazio all'inizio." + }, + "setupCompleteTitle": { + "message": "Fantastico! Sei pronto!", + "description": "Titolo del completamento della configurazione" + }, + "setupCompleteDescription": { + "message": "Ora puoi iniziare a registrare qui o in qualsiasi altra scheda.", + "description": "Descrizione del completamento della configurazione" + }, + "clickHereDrawOnboarding": { + "message": "Clicca qui per disegnare", + "description": "Istruzioni per fare clic qui" + }, + "countdownMessage": { + "message": "Rilassati. Fai clic ovunque per interrompere il conto alla rovescia.", + "description": "Messaggio del conto alla rovescia" + }, + "sandboxEditorTooSmallInfo": { + "message": "L'editing del video potrebbe essere impreciso a causa degli intervalli tra i frame con brevi durate.", + "description": "Informazioni sull'editor troppo piccolo" + }, + "processingBannerEditor": { + "message": "Il video è in fase di elaborazione, la riproduzione potrebbe essere imprecisa o interrotta.", + "description": "Banner di elaborazione nell'editor" + }, + "croppingInfoTitle": { + "message": "Il ritaglio del video potrebbe richiedere del tempo", + "description": "Titolo delle informazioni sul ritaglio" + }, + "croppingInfoDescription": { + "message": "Iscriviti per modificare i video più velocemente", + "description": "Descrizione delle informazioni sul ritaglio" + }, + "micOnToast": { + "message": "Microfono attivato", + "description": "Titolo del messaggio del microfono attivato" + }, + "micOffToast": { + "message": "Microfono disattivato", + "description": "Titolo del messaggio del microfono disattivato" + }, + "hideUIAlerts": { + "message": "Nascondi le notifiche dell'interfaccia", + "description": "Pulsante per nascondere gli avvisi dell'interfaccia" + }, + "noShowAgain": { + "message": "Non mostrare più", + "description": "Pulsante di non mostrare più" + }, + "toolbarHoverOnly": { + "message": "Nascondi i controlli quando non li usi", + "description": "Pulsante per mostrare la barra degli strumenti solo passando il cursore" + }, + + "stopRecording": { + "message": "Arresta la registrazione", + "description": "Pulsante per interrompere la registrazione nella schermata di registrazione" + }, + "updateAnnouncementTitle": { + "message": "Benvenuto nella nuova versione di MyTechPassport!", + "description": "Titolo dell'annuncio di aggiornamento per gli utenti esistenti" + }, + "updateAnnouncementDescription": { + "message": "Abbiamo aggiornato il design e sviluppato nuove funzionalità, ma non preoccuparti, rimane comunque l'estensione gratuita, privata e open source di sempre.", + "description": "Descrizione dell'annuncio di aggiornamento per gli utenti esistenti" + }, + "updateAnnouncementLearnMore": { + "message": "Scopri di più sull'aggiornamento.", + "description": "Link 'Scopri di più' dell'annuncio di aggiornamento per gli utenti esistenti" + }, + "updateAnnouncementButton": { + "message": "Inizia", + "description": "Pulsante dell'annuncio di aggiornamento per gli utenti esistenti" + }, + "streamErrorModalTitle": { + "message": "Errore durante l'avvio della registrazione", + "description": "Titolo del modalità di errore di streaming" + }, + "streamErrorModalDescription": { + "message": "Si è verificato un errore durante l'avvio della registrazione. Riavvia il tuo browser e riprova. Se il problema persiste, contattaci all'indirizzo support@MyTechPassportsport.io.", + "description": "Descrizione del modalità di errore di streaming" + }, + "highestQuality": { + "message": "Qualità più alta", + "description": "Etichetta per attivare la qualità più alta nella finestra popup" + }, + "restoreRecording": { + "message": "Ripristina l'ultima registrazione", + "description": "Pulsante per ripristinare l'ultima registrazione nella finestra popup" + }, + "havingIssuesButton": { + "message": "Riscontri problemi?", + "description": "Pulsante dei problemi nell'editor" + }, + "havingIssuesModalTitle": { + "message": "Non riesci a vedere la tua registrazione?", + "description": "Titolo del modal dei problemi nell'editor" + }, + "havingIssuesModalDescription": { + "message": "Se hai completato la tua registrazione e ti trovi su questa pagina senza vedere il tuo video, puoi tentare di scaricare i dati video grezzi se sono disponibili. Puoi anche metterti in contatto e inviare una segnalazione di errore.", + "description": "Descrizione del modal dei problemi nell'editor" + }, + "havingIssuesModalButton": { + "message": "Scarica dati video grezzi", + "description": "Pulsante nel modal dei problemi nell'editor" + }, + "havingIssuesModalButton2": { + "message": "Segnala un errore", + "description": "Secondo pulsante nel modal dei problemi nell'editor" + }, + "noRecordingFound": { + "message": "Nessuna registrazione trovata, mi dispiace :(", + "description": "Avviso di nessuna registrazione trovata nell'editor" + }, + "memoryLimitTitle": { + "message": "Limite di memoria raggiunto", + "description": "Titolo del limite di memoria raggiunto" + }, + "memoryLimitDescription": { + "message": "Il tuo dispositivo ha esaurito la memoria disponibile per la registrazione, causando l'interruzione automatica della registrazione. Se desideri registrare per un periodo più lungo, puoi provare a ridurre la qualità del video o a liberare spazio sul tuo dispositivo.", + "description": "Descrizione del limite di memoria raggiunto" + }, + "understoodButton": { + "message": "Capito", + "description": "Pulsante Capito" + }, + "notEnoughSpaceTitle": { + "message": "Spazio insufficiente", + "description": "Titolo di spazio insufficiente" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassport richiede almeno 1 GB di spazio libero per la registrazione. Per favore, libera spazio e riprova.", + "description": "Descrizione di spazio insufficiente" + }, + "clearSpaceButton": { + "message": "Cancella le registrazioni precedenti", + "description": "Pulsante Cancella le registrazioni precedenti" + }, + "sandboxAdvancedTitle": { + "message": "Avanzato", + "description": "Sezione avanzata nella pagina dell'editor nell'ambiente protetto" + }, + "rawRecordingButtonTitle": { + "message": "Scarica file video grezzo", + "description": "Pulsante di download registrazione grezza" + }, + "rawRecordingButtonDescription": { + "message": "Esporta i dati di registrazione originali", + "description": "Etichetta del pulsante di download registrazione grezza" + }, + "troubleshootButtonTitle": { + "message": "Ottieni assistenza per la tua registrazione", + "description": "Pulsante di risoluzione dei problemi" + }, + "troubleShootButtonDescription": { + "message": "Recupera il tuo video e risolvi altri problemi", + "description": "Etichetta di risoluzione dei problemi" + }, + "rawRecordingModalTitle": { + "message": "Scarica file video grezzo", + "description": "Titolo del modulo registrazione grezza" + }, + "rawRecordingModalDescription": { + "message": "Il file video grezzo è il file originale registrato da MyTechPassport. Questo video non è stato elaborato o modificato, quindi potrebbe essere molto grande e potrebbe non essere riproducibile su tutti i dispositivi. Se stai riscontrando problemi con il video elaborato, puoi utilizzare questo file per recuperare il tuo video.", + "description": "Descrizione del modulo registrazione grezza" + }, + "rawRecordingModalButton": { + "message": "Scarica", + "description": "Pulsante del modulo registrazione grezza" + }, + "troubleshootModalTitle": { + "message": "Scarica informazioni di sistema e dati video per la risoluzione dei problemi", + "description": "Titolo del modulo di risoluzione dei problemi" + }, + "troubleshootModalDescription": { + "message": "Dopo il download, invia il file a support@MyTechPassport.io con qualsiasi informazione pertinente. Utilizzeremo questi dati per aiutarti a risolvere eventuali problemi che riscontri con l'estensione e, se possibile, recuperare il tuo video.", + "description": "Descrizione del modulo di risoluzione dei problemi" + }, + "troubleshootModalButton": { + "message": "Scarica", + "description": "Pulsante del modulo di risoluzione dei problemi" + }, + + "recoveryModeTitle": { + "message": "Modalità di recupero", + "description": "Titolo della modalità di recupero" + }, + + "downloadForTroubleshootingOption": { + "message": "Scarica dati per risolvere problemi", + "description": "Opzione di scaricamento per risolvere problemi" + }, + "getHelpNav": { + "message": "Centro assistenza", + "description": "Elemento di navigazione per il centro assistenza" + }, + "audioWarningTitle": { + "message": "Registra l'audio del computer", + "description": "Titolo dell'avviso audio" + }, + "audioWarningDescription": { + "message": "Per registrare l'audio da questa pagina, devi passare a '$tab$'.", + "description": "Descrizione dell'avviso audio", + "placeholders": { + "tab": { + "content": "$1", + "example": "Area della scheda" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Estensione non supportata sulla scheda", + "description": "Titolo dell'estensione non supportata sulla scheda" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport non è stato supportato nella tua scheda precedente. Puoi comunque iniziare la registrazione qui e passare alla scheda, ma la tua fotocamera e la barra degli strumenti non saranno visibili.", + "description": "Descrizione dell'estensione non supportata sulla scheda" + }, + "backupsTitle": { + "message": "Configura un backup locale per le registrazioni di MyTechPassport", + "description": "Titolo dei backup" + }, + "backupsDescription1": { + "message": "Tieni una copia di tutte le registrazioni che fai. Se non configuri i backup, le tue registrazioni verranno salvate solo quando decidi di scaricarle.", + "description": "Descrizione dei backup" + }, + "backupsDescription2": { + "message": "Potresti dover creare una nuova cartella prima se stai cercando di salvare in Download o in altre cartelle di sistema.", + "description": "Descrizione dei backup" + }, + "backupsSelectFolder": { + "message": "Seleziona una cartella", + "description": "Pulsante Seleziona una cartella" + }, + "backupsNotNow": { + "message": "Non ora", + "description": "Pulsante Non ora" + }, + "backupsOnTitle": { + "message": "Le tue registrazioni sono salvate localmente", + "description": "Titolo dei backup attivi" + }, + "backupsOnDescription": { + "message": "Per evitare di richiedere autorizzazioni ogni volta che registri, ti consigliamo di lasciare aperta questa scheda.", + "description": "Descrizione dei backup attivi" + }, + "backupsClose": { + "message": "Chiudi comunque la scheda", + "description": "Pulsante Chiudi comunque la scheda" + }, + "backupsStop": { + "message": "Arresta tutti i backup delle registrazioni", + "description": "Pulsante Arresta i backup" + }, + "backupsConfirmTitle": { + "message": "Conferma nuovamente l'accesso alla cartella di backup locale di MyTechPassport", + "description": "Titolo della conferma dei backup" + }, + "backupsConfirmDescription": { + "message": "Ci dispiace, ma abbiamo bisogno della tua autorizzazione ancora una volta per continuare a fare backup locali delle tue registrazioni. Sfortunatamente, dovremo chiedere ogni volta che chiudi questa scheda, il che può accadere se chiudi il browser o riavvii il computer.", + "description": "Descrizione della conferma dei backup" + }, + "backupsConfirmAllow": { + "message": "Consenti a MyTechPassport di continuare a fare backup delle registrazioni", + "description": "Pulsante Consenti nella conferma dei backup" + }, + "backupsToggle": { + "message": "Attiva i backup delle registrazioni", + "description": "Etichetta Attiva i backup" + }, + "backupPermissionFailTitle": { + "message": "Permesso non concesso per il backup della registrazione", + "description": "Titolo del fallimento del permesso di backup" + }, + "backupPermissionFailDescription": { + "message": "Non hai selezionato una cartella per il backup locale delle registrazioni. A seconda della versione del tuo browser o del sistema operativo, potrebbe essere richiesto di selezionare la cartella ogni volta che inizi a registrare. Puoi riprovare o disabilitare completamente i backup se preferisci non concedere autorizzazioni ripetutamente.", + "description": "Descrizione del fallimento del permesso di backup" + }, + "recordAudioWarningMacTitle": { + "message": "Registra l'audio del computer", + "description": "Titolo dell'avviso audio per macOS" + }, + "recordAudioWarningMacDescription": { + "message": "Su macOS, puoi registrare solo l'audio della scheda. Seleziona l'opzione 'Scheda Chrome' e assicurati che 'Condividi anche l'audio della scheda' sia abilitato.", + "description": "Descrizione dell'avviso audio per macOS" + }, + "recordAudioWarningOtherTitle": { + "message": "Registra l'audio del computer", + "description": "Titolo dell'avviso audio per altri sistemi" + }, + "recordAudioWarningOtherDescription": { + "message": "Assicurati di attivare l'opzione 'Condividi l'audio del sistema' se desideri registrare l'audio del computer. Se non vedi questa opzione, prova a aggiornare Chrome o passa alla registrazione della scheda.", + "description": "Descrizione dell'avviso audio per altri sistemi" + }, + + "maxResolutionLabel": { + "message": "Risoluzione massima", + "description": "Etichetta risoluzione massima nel menu delle impostazioni" + }, + "maxFPSLabel": { + "message": "FPS massimi", + "description": "Etichetta FPS massimi nel menu delle impostazioni" + }, + + "notEnoughRAM": { + "message": "RAM insufficiente", + "description": "Etichetta 'RAM insufficiente' nel menu delle impostazioni" + }, + "resizeWindowLabel": { + "message": "Ridimensiona finestra", + "description": "Etichetta per il ridimensionamento della finestra nel menu delle impostazioni" + }, + "screenTooSmallTooltip": { + "message": "Lo schermo è troppo piccolo per questa risoluzione", + "description": "Tooltip che indica che lo schermo è troppo piccolo nel menu delle impostazioni" + }, + "maxResolutionTooltip": { + "message": "Impossibile registrare a questa risoluzione sul tuo dispositivo", + "description": "Tooltip che indica che non è possibile registrare a questa risoluzione nel menu delle impostazioni" + }, + "permissionsModalReview": { + "message": "Rivedi le autorizzazioni", + "description": "Pulsante per la revisione delle autorizzazioni" + } +} diff --git a/build/_locales/ko/messages.json b/build/_locales/ko/messages.json new file mode 100644 index 0000000..65ea904 --- /dev/null +++ b/build/_locales/ko/messages.json @@ -0,0 +1,1040 @@ +{ + "extName": { + "message": "MyTechPassport - 화면 녹화 프로그램 & 주석 도구", + "description": "Extension name" + }, + "extDesc": { + "message": "제한 없이 사용할 수 있는 최고의 무료 화면 녹화기입니다. 로그인이 필요하지 않으며 개인정보 보호에 친화적으로 화면을 녹화하고 주석을 추가하고 확대/축소하며 흐림 효과를 적용하고 비디오를 편집하세요.", + "description": "Extension description" + }, + "recordTab": { + "message": "녹화", + "description": "Record tab label on popup" + }, + "videosTab": { + "message": "귀하의 동영상", + "description": "Videos tab label on popup" + }, + "screenType": { + "message": "화면", + "description": "Screen recording type label on popup" + }, + "tabType": { + "message": "탭 영역", + "description": "Tab area recording type label on popup" + }, + "cameraType": { + "message": "카메라", + "description": "Camera recording type label on popup" + }, + "mockupType": { + "message": "모의실행", + "description": "Mockup recording type label on popup" + }, + "customAreaRecordingDisabledTitle": { + "message": "사용자 정의 영역 녹화 비활성화됨", + "description": "Custom area recording disabled warning on popup for Chrome version older than 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Chrome 버전을 104로 업데이트하세요.", + "description": "Custom area recording disabled warning description on popup for Chrome version older than 104" + }, + "customAreaRecordingDisabledAction": { + "message": "업데이트", + "description": "Custom area recording disabled warning action on popup for Chrome version older than 104" + }, + "permissionsModalTitle": { + "message": "권한 확인", + "description": "Camera / microphone permissions warning modal title" + }, + "permissionsModalDescription": { + "message": "스크리니티가 카메라 또는 마이크에 액세스할 수 없는 것으로 보입니다. 주소 표시 줄의 카메라 아이콘을 클릭하여 액세스를 허용하세요.", + "description": "Camera / microphone permissions warning modal description" + }, + "permissionsModalDismiss": { + "message": "닫기", + "description": "Camera / microphone permissions warning modal dismiss button" + }, + "allowCameraAccessButton": { + "message": "카메라 액세스 허용", + "description": "Allow camera access button" + }, + "allowMicrophoneAccessButton": { + "message": "마이크 액세스 허용", + "description": "Allow microphone access button" + }, + "pushToTalkLabel": { + "message": "푸시 투 토크", + "description": "Push to talk switch label" + }, + "customAreaLabel": { + "message": "녹화할 영역 설정", + "description": "Custom area switch label" + }, + "flipCameraLabel": { + "message": "카메라 뒤집기", + "description": "Flip camera switch label" + }, + "backgroundEffectsLabel": { + "message": "배경 효과", + "description": "Background effects switch label" + }, + "recordButtonLabel": { + "message": "녹화 시작", + "description": "Record button label" + }, + "recordButtonInProgressLabel": { + "message": "녹화 시작 중...", + "description": "Record button in progress label" + }, + "recordButtonNoCameraLabel": { + "message": "녹화할 카메라를 설정하세요", + "description": "Record button label when in camera mode and no camera is selected" + }, + "showMoreOptionsLabel": { + "message": "더 많은 옵션 표시", + "description": "Show more options label" + }, + "systemAudioLabel": { + "message": "시스템 오디오 포함", + "description": "탭/시스템 오디오 레이블" + }, + "hideToolbarLabel": { + "message": "툴바 숨기기", + "description": "Hide toolbar label" + }, + "countdownLabel": { + "message": "카운트다운", + "description": "Countdown label" + }, + "alarmLabel": { + "message": "시간 제한 설정", + "description": "Alarm label" + }, + "blurTypeLabel": { + "message": "흐림", + "description": "Blur background label" + }, + "noneDropdownLabel": { + "message": "없음", + "description": "No device selected" + }, + "noCameraDropdownLabel": { + "message": "카메라 없음", + "description": "No camera selected" + }, + "noMicrophoneDropdownLabel": { + "message": "마이크 없음", + "description": "No microphone selected" + }, + "selectSourceDropdownPlaceholder": { + "message": "소스 선택", + "description": "Select source placeholder" + }, + "offLabel": { + "message": "끄기", + "description": "Off label on dropdown" + }, + "regionWidthLabel": { + "message": "너비", + "description": "Region width label" + }, + "regionHeightLabel": { + "message": "높이", + "description": "Region height label" + }, + "addImageToastTitle": { + "message": "이미지 추가하려면 클릭", + "description": "Toast that shows when adding a new image" + }, + "finishRecordingTooltip": { + "message": "녹화 종료", + "description": "Finish recording tooltip" + }, + "restartRecordingTooltip": { + "message": "녹화 재시작", + "description": "Restart recording tooltip" + }, + "pauseRecordingTooltip": { + "message": "녹화 일시 중지", + "description": "Pause recording tooltip" + }, + "resumeRecordingTooltip": { + "message": "녹화 재개", + "description": "Resume recording tooltip" + }, + "cancelRecordingTooltip": { + "message": "녹화 취소", + "description": "Cancel recording tooltip" + }, + "toggleDrawingToolsTooltip": { + "message": "그리기 도구 전환", + "description": "Toggle drawing tools tooltip" + }, + "toggleBlurToolTooltip": { + "message": "흐리게 만들기 도구 전환", + "description": "Toggle blur tool tooltip" + }, + "toggleCursorOptionsTooltip": { + "message": "커서 옵션 전환", + "description": "Toggle cursor options tooltip" + }, + "disableCameraTooltip": { + "message": "카메라 비활성화", + "description": "Disable camera tooltip" + }, + "enableCameraTooltip": { + "message": "카메라 활성화", + "description": "Enable camera tooltip" + }, + "noCameraPermissionsTooltip": { + "message": "카메라 권한 없음", + "description": "No camera permissions tooltip" + }, + "disableMicrophoneTooltip": { + "message": "마이크 비활성화", + "description": "Disable microphone tooltip" + }, + "enableMicrophoneTooltip": { + "message": "마이크 활성화", + "description": "Enable microphone tooltip" + }, + "noMicrophonePermissionsTooltip": { + "message": "마이크 권한 없음", + "description": "No microphone permissions tooltip" + }, + "selectToolTooltip": { + "message": "도구 선택", + "description": "Select tool tooltip" + }, + "penToolTooltip": { + "message": "펜 도구", + "description": "Pen tool tooltip" + }, + "highlighterToolTooltip": { + "message": "형광펜 도구", + "description": "Highlighter tool tooltip" + }, + "eraserToolTooltip": { + "message": "지우개 도구", + "description": "Eraser tool tooltip" + }, + "textToolTooltip": { + "message": "텍스트 도구", + "description": "Text tool tooltip" + }, + "shapeToolTooltip": { + "message": "도형 도구", + "description": "Shape tool tooltip" + }, + "arrowToolTooltip": { + "message": "화살표 도구", + "description": "Arrow tool tooltip" + }, + "imageToolTooltip": { + "message": "이미지 도구", + "description": "Image tool tooltip" + }, + "undoTooltip": { + "message": "되돌리기", + "description": "Undo tooltip" + }, + "redoTooltip": { + "message": "다시 실행", + "description": "Redo tooltip" + }, + "clearCanvasTooltip": { + "message": "캔버스 지우기", + "description": "Clear canvas tooltip" + }, + "moreColorsTooltip": { + "message": "더 많은 색상", + "description": "More colors tooltip" + }, + "thickStrokeTooltip": { + "message": "굵은 선", + "description": "Thick stroke tooltip" + }, + "mediumStrokeTooltip": { + "message": "중간 선", + "description": "Medium stroke tooltip" + }, + "thinStrokeTooltip": { + "message": "얇은 선", + "description": "Thin stroke tooltip" + }, + "togglePictureinPictureModeTooltip": { + "message": "화면 내 화면 모드 전환", + "description": "Toggle picture-in-picture mode tooltip" + }, + "toggleFillTooltip": { + "message": "채우기 전환", + "description": "Toggle fill tooltip" + }, + "drawingModeToast": { + "message": "그리기 모드", + "description": "Drawing mode toast" + }, + "blurModeToast": { + "message": "흐리게 만들기 모드", + "description": "Blur mode toast" + }, + "clearBlurredElementsTooltip": { + "message": "모든 흐린 요소 지우기", + "description": "Clear all blurred elements tooltip" + }, + "highlightClicksTooltip": { + "message": "클릭 강조", + "description": "Highlight clicks tooltip" + }, + "highlightCursorTooltip": { + "message": "커서 강조", + "description": "Highlight cursor tooltip" + }, + "spotlightCursorTooltip": { + "message": "커서 하이라이트", + "description": "Spotlight cursor tooltip" + }, + "permissionsModalNoShowAgain": { + "message": "다시 표시하지 않음", + "description": "Permissions modal dismiss button" + }, + "restartModalTitle": { + "message": "녹화를 다시 시작하시겠습니까?", + "description": "Restart recording modal title" + }, + "restartModalDescription": { + "message": "현재 비디오 진행 상황이 손실됩니다.", + "description": "Restart recording modal description" + }, + "restartModalRestart": { + "message": "녹화 다시 시작", + "description": "Restart recording modal restart button" + }, + "restartModalResume": { + "message": "녹화 재개", + "description": "Restart recording modal resume button" + }, + "discardModalTitle": { + "message": "녹화를 폐기하시겠습니까?", + "description": "Discard recording modal title" + }, + "discardModalDescription": { + "message": "현재 비디오 진행 상황이 손실됩니다.", + "description": "Discard recording modal description" + }, + "discardModalDiscard": { + "message": "녹화 폐기", + "description": "Discard recording modal discard button" + }, + "discardModalResume": { + "message": "녹화 재개", + "description": "Discard recording modal resume button" + }, + "recorderSelectTitle": { + "message": "녹화할 항목 선택", + "description": "Title in recording page" + }, + "recorderSelectProgressTitle": { + "message": "녹화 중...", + "description": "Title in recording page while recording" + }, + "recorderSelectDescription": { + "message": "이 탭을 열어둡니다. 녹화가 저장되면 자동으로 닫힙니다.", + "description": "Description in recording page" + }, + "sandboxProgressTitle": { + "message": "녹화 준비 중...", + "description": "Title in sandbox page while recording / saving" + }, + "sandboxProgressDescription": { + "message": "이 탭을 열어둡니다. 녹화가 준비되면 업데이트됩니다.", + "description": "Description in sandbox page while recording / saving" + }, + "sandboxEditorMainTitle": { + "message": "편집기", + "description": "Title in navigation of the sandbox editor page" + }, + "sandboxEditorCancelButton": { + "message": "취소", + "description": "Cancel button in sandbox editor page" + }, + "sandboxEditorRevertButton": { + "message": "원래대로 되돌리기", + "description": "Revert button in sandbox editor page" + }, + "sandboxEditorResetButton": { + "message": "초기화", + "description": "Reset button in sandbox editor page" + }, + "sandboxEditorSaveButton": { + "message": "변경 사항 저장", + "description": "Save button in sandbox editor page" + }, + "sandboxEditorSaveProgressButton": { + "message": "저장 중...", + "description": "Save button in sandbox editor page while saving" + }, + "sandboxAudioDragAndDrop": { + "message": "오디오 파일을 끌어다 놓거나 클릭하여 업로드하세요.", + "description": "Drag and drop audio file in sandbox editor page" + }, + "sandboxAudioOrBrowse": { + "message": "또는 클릭하여 찾아보기", + "description": "Or click to browse audio file in sandbox editor page" + }, + "sandboxAudioSettingsTitle": { + "message": "설정", + "description": "Audio settings title in sandbox editor page" + }, + "sandboxAudioVolumeLabel": { + "message": "볼륨", + "description": "Audio volume label in sandbox editor page" + }, + "sandboxAudioUpdateButton": { + "message": "업데이트", + "description": "Update audio button in sandbox editor page" + }, + "sandboxCropTitle": { + "message": "자르기", + "description": "Crop title in sandbox editor page" + }, + "widthLabel": { + "message": "폭", + "description": "Width label for properties" + }, + "heightLabel": { + "message": "높이", + "description": "Height label for properties" + }, + "leftLabel": { + "message": "왼쪽", + "description": "Left label for properties" + }, + "topLabel": { + "message": "위", + "description": "Top label for properties" + }, + "sandboxEditorTrimInfo": { + "message": "핸들을 드래그하고 왼쪽의 버튼을 사용하여 선택한 부분을 편집하세요.", + "description": "Info about trimming in sandbox editor" + }, + "sandboxEditorTrimButton": { + "message": "비디오 자르기", + "description": "Trim button in sandbox editor" + }, + "sandboxEditorTrimProgressButton": { + "message": "자르기 중...", + "description": "Trim button in sandbox editor while trimming" + }, + "sandboxEditorCutButton": { + "message": "섹션 자르기", + "description": "Cut button in sandbox editor" + }, + "sandboxEditorCutProgressButton": { + "message": "잘라내는 중...", + "description": "Cut button in sandbox editor while cutting" + }, + "sandboxEditorMuteButton": { + "message": "오디오 음소거", + "description": "Mute button in sandbox editor" + }, + "sandboxEditorMuteProgressButton": { + "message": "음소거 중...", + "description": "Mute button in sandbox editor while muting" + }, + "learnMoreDot": { + "message": "더 알아보기.", + "description": "Learn more with a dot" + }, + "undoLabel": { + "message": "되돌리기", + "description": "Undo label" + }, + "redoLabel": { + "message": "다시 실행", + "description": "Redo label" + }, + "leaveReview": { + "message": "리뷰를 남겨주세요", + "description": "Leave a review button" + }, + "followForUpdates": { + "message": "업데이트 받기", + "description": "Follow for updates button" + }, + "offlineLabelTitle": { + "message": "현재 오프라인 상태입니다", + "description": "Offline label" + }, + "offlineLabelDescription": { + "message": "일부 기능은 다시 연결할 때까지 사용할 수 없습니다", + "description": "Offline label description" + }, + "offlineLabelTryAgain": { + "message": "다시 시도", + "description": "Offline label try again button" + }, + "updateChromeLabelTitle": { + "message": "Chrome을 업데이트해야 합니다", + "description": "Update Chrome label" + }, + "updateChromeLabelDescription": { + "message": "더 많은 기능에 액세스하려면 업데이트하세요", + "description": "Update Chrome label description" + }, + "learnMoreLabel": { + "message": "더 알아보기", + "description": "Learn more button" + }, + "overLimitLabelTitle": { + "message": "로컬에서 처리하기에 비디오가 너무 길어요", + "description": "편집기 내에서 5분 이상 제한 레이블" + }, + "overLimitLabelDescription": { + "message": "편집 및 MP4 형식으로 내보내기를 사용할 수 없어요", + "description": "편집기 내에서 5분 이상 제한 설명" + }, + "videoProcessingLabelTitle": { + "message": "비디오 처리 중...", + "description": "Video processing label in editor" + }, + "videoProcessingLabelDescription": { + "message": "업그레이드하여 더 빠른 편집", + "description": "Video processing description in editor" + }, + "sandboxEditTitle": { + "message": "편집", + "description": "Edit title in sandbox editor page" + }, + "noConnectionLabel": { + "message": "연결 없음", + "description": "No connection label" + }, + "notAvailableLabel": { + "message": "사용 불가", + "description": "Not available label" + }, + "editButtonTitle": { + "message": "비디오 편집", + "description": "Trim label button" + }, + "editButtonDescription": { + "message": "비디오 자르기, 자르기 또는 음소거", + "description": "Trim label" + }, + "preparingLabel": { + "message": "비디오 준비 중, 기다려주세요...", + "description": "Preparing label" + }, + "cropButtonTitle": { + "message": "자르기", + "description": "Crop label button" + }, + "cropButtonDescription": { + "message": "비디오 자르기 및 크기 조정", + "description": "Crop label" + }, + "addAudioButtonTitle": { + "message": "오디오 추가", + "description": "Add audio label button" + }, + "addAudioButtonDescription": { + "message": "비디오에 추가할 자체 오디오 업로드", + "description": "Add audio label" + }, + "sandboxSaveTitle": { + "message": "저장", + "description": "Save title in sandbox editor page" + }, + "signOutDriveLabel": { + "message": "Drive에서 로그아웃", + "description": "Sign out of Google Drive label" + }, + "savingDriveLabel": { + "message": "저장 중...", + "description": "Saving to Google Drive label" + }, + "saveDriveButtonTitle": { + "message": "Drive에 저장", + "description": "Save to Google Drive button" + }, + "saveDriveButtonDescription": { + "message": "현재 버전을 Google Drive에 저장", + "description": "Save to Google Drive label" + }, + "signInDriveLabel": { + "message": "로그인하고 Drive에 저장", + "description": "Sign in to Google Drive label" + }, + "sandboxExportTitle": { + "message": "내보내기", + "description": "Export title in sandbox editor page" + }, + "downloadingLabel": { + "message": "다운로드 중...", + "description": "Downloading label" + }, + "downloadWEBMButtonTitle": { + "message": ".webm으로 다운로드", + "description": "Download WEBM button" + }, + "downloadWEBMButtonDescription": { + "message": ".webm 비디오 내보내기", + "description": "Download WEBM label" + }, + "downloadMP4ButtonTitle": { + "message": ".mp4으로 다운로드", + "description": "Download MP4 button" + }, + "downloadMP4ButtonDescription": { + "message": ".mp4 비디오 내보내기 (권장)", + "description": "Download MP4 label" + }, + "downloadGIFButtonTitle": { + "message": ".gif으로 다운로드", + "description": "Download GIF button" + }, + "downloadGIFButtonDescription": { + "message": "GIF 내보내기 (최대 30초)", + "description": "Download GIF label" + }, + "shareModalSandboxTitle": { + "message": "다른 사람과 비디오 공유", + "description": "Share modal title in sandbox editor page" + }, + "shareModalSandboxDescription": { + "message": "곧 출시됩니다! 이메일을 남겨 업데이트를 받고 공유 가능 시 알림을 받으세요.", + "description": "Share modal description in sandbox editor page" + }, + "shareModalSandboxButton": { + "message": "대기 목록 가입", + "description": "Share modal email placeholder in sandbox editor page" + }, + "shareSandboxButton": { + "message": "비디오 공유", + "description": "Share button in sandbox editor page" + }, + "replaceAudioEditor": { + "message": "기존 오디오 교체", + "description": "Replace audio button in editor" + }, + "zoomToPointPopup": { + "message": "커서로 확대", + "description": "Zoom to point popup" + }, + "stayInPagePopup": { + "message": "녹화할 때 페이지에 머무르기", + "description": "Stay in page popup" + }, + "micReminderPopup": { + "message": "마이크 꺼짐 경고", + "description": "Mic reminder popup" + }, + "helpPopup": { + "message": "도움말", + "description": "Help popup button" + }, + "pausedRecordingToast": { + "message": "녹화 일시 중지. 계속하려면 재생 버튼을 누르세요.", + "description": "Paused recording modal title" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport가 화면 녹화 권한이 없습니다", + "description": "Permission modal title" + }, + "chromePermissionsModalDescription": { + "message": "화면 녹화를 사용하려면 MyTechPassportsportsport에게 화면 캡처 권한을 부여해야 합니다.", + "description": "Permission modal description" + }, + "chromePermissionsModalAction": { + "message": "화면 녹화 활성화", + "description": "Permission modal action" + }, + "chromePermissionsModalCancel": { + "message": "취소", + "description": "Permission modal cancel" + }, + "micMutedModalTitle": { + "message": "마이크가 음소거되었습니다", + "description": "Microphone muted modal title" + }, + "micMutedModalDescription": { + "message": "녹음에 오디오를 포함하려면 마이크를 음소거 해제해야 합니다. 오디오 없이 계속하시겠습니까?", + "description": "Microphone muted modal description" + }, + "micMutedModalAction": { + "message": "네, 계속", + "description": "Microphone muted modal continue" + }, + "micMutedModalCancel": { + "message": "취소", + "description": "Microphone muted modal cancel" + }, + "setupTitle": { + "message": "MyTechPassport로 세 가지 간단한 단계로 시작하세요:", + "description": "Set up steps title" + }, + "setupStep1Before": { + "message": "1- 클릭하세요 ", + "description": "Set up step 1, before the icon. It needs a space at the end." + }, + "setupStep1After": { + "message": " 확장 아이콘", + "description": "Set up step 1, after the icon. It needs a space at the beginning." + }, + "setupStep2Before": { + "message": "2- 누르세요 ", + "description": "Set up step 2, before the icon. It needs a space at the end." + }, + "setupStep2After": { + "message": " 고정된 아이콘", + "description": "Set up step 2, after the icon. It needs a space at the beginning." + }, + "setupStep3Before": { + "message": "3- 클릭하세요 ", + "description": "Set up step 3, before the icon. It needs a space at the end." + }, + "setupStep3After": { + "message": " MyTechPassport 아이콘을 시작하려면", + "description": "Set up step 3, after the icon. It needs a space at the beginning." + }, + "setupCompleteTitle": { + "message": "멋져요! 이제 모든 준비가 끝났습니다", + "description": "Set up complete title" + }, + "setupCompleteDescription": { + "message": "이제 여기에서 녹화를 시작하거나 다른 탭에서 녹화를 시작할 수 있습니다.", + "description": "Set up complete description" + }, + "clickHereDrawOnboarding": { + "message": "여기를 클릭하여 그리기", + "description": "Click here onboarding" + }, + "countdownMessage": { + "message": "편안하세요. 카운트다운을 중지하려면 어디든 클릭하세요.", + "description": "Countdown message" + }, + "sandboxEditorTooSmallInfo": { + "message": "프레임 간 간격 때문에 짧은 시간 범위에 대한 편집이 부정확할 수 있습니다.", + "description": "Info about the editor being too small" + }, + "processingBannerEditor": { + "message": "비디오 처리 중이며 재생이 부정확하거나 중단될 수 있습니다.", + "description": "Processing banner in editor" + }, + "croppingInfoTitle": { + "message": "자르기에는 시간이 걸릴 수 있습니다", + "description": "Cropping info title" + }, + "croppingInfoDescription": { + "message": "업그레이드하여 더 빠른 처리", + "description": "Cropping info description" + }, + "micOnToast": { + "message": "마이크 활성화됨", + "description": "Microphone enabled toast title" + }, + "micOffToast": { + "message": "마이크 비활성화됨", + "description": "Microphone disabled toast title" + }, + "hideUIAlerts": { + "message": "UI 알림 숨기기", + "description": "Hide UI alerts button" + }, + "noShowAgain": { + "message": "다시 표시하지 않음", + "description": "Don't show again button" + }, + "toolbarHoverOnly": { + "message": "사용하지 않을 때 툴바 숨기기", + "description": "Only show toolbar on hover button" + }, + "stopRecording": { + "message": "녹화 중지", + "description": "Stop recording button in recording screen" + }, + "updateAnnouncementTitle": { + "message": "새로운 MyTechPassport에 오신 것을 환영합니다!", + "description": "기존 사용자를 위한 업데이트 공지 제목" + }, + "updateAnnouncementDescription": { + "message": "새로운 디자인과 다양한 기능을 소개합니다. 걱정 마세요. 여전히 무료, 개인 정보 보호, 오픈 소스 확장 프로그램입니다.", + "description": "기존 사용자를 위한 업데이트 공지 설명" + }, + "updateAnnouncementLearnMore": { + "message": "업데이트에 대한 자세한 정보 알아보기.", + "description": "기존 사용자를 위한 업데이트 공지 자세히 알아보기 링크" + }, + "updateAnnouncementButton": { + "message": "시작하기", + "description": "기존 사용자를 위한 업데이트 공지 버튼" + }, + "streamErrorModalTitle": { + "message": "녹화 시작 중 오류 발생", + "description": "스트림 오류 모달 제목" + }, + "streamErrorModalDescription": { + "message": "녹화를 시작하는 중에 오류가 발생한 것 같습니다. 브라우저를 다시 시작하고 다시 시도해보세요. 문제가 계속되면 support@MyTechPassport.io로 문의해주세요.", + "description": "스트림 오류 모달 설명" + }, + "highestQuality": { + "message": "최상 품질", + "description": "팝업에서 최상 품질 레이블 토글" + }, + "restoreRecording": { + "message": "최근 녹음 복원", + "description": "팝업에서 최근 녹음 복원 버튼" + }, + "havingIssuesButton": { + "message": "문제가 있나요?", + "description": "에디터 내 문제 버튼" + }, + "havingIssuesModalTitle": { + "message": "녹화물이 보이지 않나요?", + "description": "에디터 내 문제 모달 제목" + }, + "havingIssuesModalDescription": { + "message": "녹화를 완료하고 비디오를 보지 못한 채 이 페이지에 남아 있다면, 사용 가능한 경우 원시 비디오 데이터를 다운로드하거나 버그 보고서를 제출할 수 있습니다.", + "description": "에디터 내 문제 모달 설명" + }, + "havingIssuesModalButton": { + "message": "원시 비디오 데이터 다운로드", + "description": "에디터 내 문제 모달 버튼" + }, + "havingIssuesModalButton2": { + "message": "버그 신고", + "description": "에디터 내 문제 모달 두 번째 버튼" + }, + "noRecordingFound": { + "message": "녹화된 것을 찾을 수 없습니다, 죄송합니다 :(", + "description": "에디터 내 녹화된 것을 찾을 수 없음 경고" + }, + "memoryLimitTitle": { + "message": "메모리 한도 도달", + "description": "메모리 한도 도달 제목" + }, + "memoryLimitDescription": { + "message": "귀하의 장치는 녹화를 위한 사용 가능한 메모리를 모두 소진하여 녹화가 자동으로 중지되었습니다. 더 긴 시간 동안 녹화하려면 비디오 품질을 낮추거나 장치의 저장 공간을 확보해보십시오.", + "description": "메모리 한도 도달 설명" + }, + "understoodButton": { + "message": "이해함", + "description": "이해함 버튼" + }, + "notEnoughSpaceTitle": { + "message": "공간 부족", + "description": "공간 부족 제목" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassport는 녹화를 위해 최소 1GB의 빈 공간이 필요합니다. 장치의 공간을 확보하고 다시 시도하십시오.", + "description": "공간 부족 설명" + }, + "clearSpaceButton": { + "message": "이전 녹화 삭제", + "description": "이전 녹화 삭제 버튼" + }, + "sandboxAdvancedTitle": { + "message": "고급 설정", + "description": "샌드박스 에디터 페이지의 고급 설정 섹션" + }, + "rawRecordingButtonTitle": { + "message": "원시 비디오 파일 다운로드", + "description": "원시 녹화 파일 다운로드 버튼" + }, + "rawRecordingButtonDescription": { + "message": "원본 녹화 데이터 내보내기", + "description": "원시 녹화 다운로드 레이블" + }, + "troubleshootButtonTitle": { + "message": "녹화에 대한 도움말 받기", + "description": "문제 해결 버튼" + }, + "troubleShootButtonDescription": { + "message": "비디오를 복구하고 다른 문제 해결하기", + "description": "문제 해결 레이블" + }, + "rawRecordingModalTitle": { + "message": "원시 비디오 파일 다운로드", + "description": "원시 녹화 모달 제목" + }, + "rawRecordingModalDescription": { + "message": "원시 비디오 파일은 MyTechPassport에 의해 녹화된 원본 비디오 파일입니다. 이 비디오는 처리되거나 편집되지 않았으므로 매우 크며 모든 장치에서 재생되지 않을 수 있습니다. 처리된 비디오에 문제가 있는 경우이 파일을 사용하여 비디오를 복구할 수 있습니다.", + "description": "원시 녹화 모달 설명" + }, + "rawRecordingModalButton": { + "message": "다운로드", + "description": "원시 녹화 모달 버튼" + }, + "troubleshootModalTitle": { + "message": "시스템 정보 및 비디오 데이터 다운로드 및 문제 해결 전송", + "description": "문제 해결 모달 제목" + }, + "troubleshootModalDescription": { + "message": "다운로드 후 해당 파일을 support@MyTechPassport.io로 보내 주십시오. 우리는 이 데이터를 사용하여 확장 프로그램과 관련된 문제를 해결하고 가능한 경우 비디오를 복구하는 데 도움을 드리겠습니다.", + "description": "문제 해결 모달 설명" + }, + "troubleshootModalButton": { + "message": "다운로드", + "description": "문제 해결 모달 버튼" + }, + "overLimitModalTitle": { + "message": "비디오가 디바이스에서 처리하기에 너무 길어요", + "description": "5분 이상 제한 모달 제목" + }, + "overLimitModalDescription": { + "message": "MyTechPassport는 완전히 개인적이며 로컬에서 실행되므로 디바이스의 하드웨어에 제한됩니다. 이 길이의 비디오를 처리하는 데 시간이 오래 걸리고 많은 리소스를 필요로 할 것입니다. 걱정하지 마세요. 여전히 WEBM 파일이나 원시 녹화를 다운로드할 수 있지만 편집 및 MP4 내보내기는 사용할 수 없습니다. 그럼에도 불구하고, 이 비디오를 처리해 보려고 할 수 있습니다. 단, 위험을 이해하는 경우에만 시도하십시오.", + "description": "5분 이상 제한 모달 설명" + }, + "overLimitModalButton": { + "message": "위험을 이해하고 시도해 보겠습니다", + "description": "5분 이상 제한 모달 버튼" + }, + "overLimitModalLearnMore": { + "message": "긴 비디오 처리에 대해 자세히 알아보기", + "description": "5분 이상 제한 모달에서 자세히 알아보기 링크와 점이 포함된 설명" + }, + + "recoveryModeTitle": { + "message": "복구 모드", + "description": "복구 모드 제목" + }, + + "downloadForTroubleshootingOption": { + "message": "문제 해결을 위한 데이터 다운로드", + "description": "문제 해결을 위한 다운로드 옵션" + }, + "getHelpNav": { + "message": "도움말 센터", + "description": "도움말 탐색 항목" + }, + "audioWarningTitle": { + "message": "페이지 오디오 녹음", + "description": "오디오 경고 제목" + }, + "audioWarningDescription": { + "message": "이 페이지의 오디오를 녹음하려면 '$tab$' 옵션을 사용해야 합니다.", + "description": "오디오 경고 설명", + "placeholders": { + "tab": { + "content": "$1", + "example": "탭 영역" + } + } + }, + "extensionNotSupportedTitle": { + "message": "페이지에서 지원되지 않는 확장 프로그램", + "description": "탭에서 지원되지 않는 확장 프로그램 제목" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport는 이전 탭에서 지원되지 않았습니다. 그럼에도 불구하고 여기에서 녹음을 시작한 다음 다른 탭으로 전환할 수 있지만 카메라와 도구 모음은 표시되지 않습니다.", + "description": "탭에서 지원되지 않는 확장 프로그램 설명" + }, + "backupsTitle": { + "message": "MyTechPassport 녹음을 위한 로컬 백업 설정", + "description": "백업 제목" + }, + "backupsDescription1": { + "message": "생성한 모든 녹음의 사본을 유지하세요. 백업을 설정하지 않으면 녹음은 다운로드하기로 결정할 때만 저장됩니다.", + "description": "백업 설명" + }, + "backupsDescription2": { + "message": "시스템 다운로드 폴더와 같은 폴더에 저장하려면 먼저 새 폴더를 만들어야 할 수 있습니다.", + "description": "백업 설명" + }, + "backupsSelectFolder": { + "message": "폴더 선택", + "description": "폴더 선택 버튼" + }, + "backupsNotNow": { + "message": "지금은 아님", + "description": "지금 아님 버튼" + }, + "backupsOnTitle": { + "message": "녹음이 로컬로 동기화됨", + "description": "활성화된 백업 제목" + }, + "backupsOnDescription": { + "message": "녹음할 때마다 권한을 요청하지 않으려면 이 탭을 열어두는 것을 권장합니다.", + "description": "활성화된 백업 설명" + }, + "backupsClose": { + "message": "그래도 탭 닫기", + "description": "그래도 탭 닫기 버튼" + }, + "backupsStop": { + "message": "모든 녹음의 백업 중지", + "description": "백업 중지 버튼" + }, + "backupsConfirmTitle": { + "message": "MyTechPassport 로컬 백업 폴더에 다시 액세스 권한을 확인하세요.", + "description": "백업 확인 제목" + }, + "backupsConfirmDescription": { + "message": "죄송하지만 녹음의 로컬 사본을 계속 만들기 위해 다시 권한이 필요합니다. 불행하게도 이 탭을 닫을 때마다 묻게 될 것이며, 이는 브라우저를 닫거나 컴퓨터를 다시 시작하는 경우에 발생할 수 있습니다.", + "description": "백업 확인 설명" + }, + "backupsConfirmAllow": { + "message": "MyTechPassport에게 녹음 백업 권한 부여", + "description": "백업 확인에서 허용 버튼" + }, + "backupsToggle": { + "message": "녹음 백업 생성", + "description": "녹음 백업 전환 레이블" + }, + "backupPermissionFailTitle": { + "message": "녹음 백업 권한 부여 실패", + "description": "녹음 백업 권한 부여 실패 제목" + }, + "backupPermissionFailDescription": { + "message": "녹음의 로컬 사본을 만들기 위한 폴더를 선택하지 않았습니다. 브라우저 또는 운영 체제 버전에 따라 녹음을 시작할 때마다 폴더를 선택하라는 메시지가 나올 수 있습니다. 다시 시도하거나 권한을 반복적으로 부여하지 않으려면 백업을 완전히 비활성화할 수 있습니다.", + "description": "녹음 백업 권한 부여 실패 설명" + }, + "recordAudioWarningMacTitle": { + "message": "컴퓨터 오디오 녹음", + "description": "macOS용 오디오 경고 제목" + }, + "recordAudioWarningMacDescription": { + "message": "macOS에서는 탭에서만 오디오를 녹음할 수 있습니다. 'Chrome 탭' 옵션을 선택하고 '탭 오디오도 공유'가 활성화되어 있는지 확인하세요.", + "description": "macOS용 오디오 경고 설명" + }, + "recordAudioWarningOtherTitle": { + "message": "컴퓨터 오디오 녹음", + "description": "기타 시스템용 오디오 경고 제목" + }, + "recordAudioWarningOtherDescription": { + "message": "컴퓨터 오디오를 녹음하려면 '시스템 오디오 공유' 옵션을 활성화하세요. 이 옵션을 보지 못하는 경우 Chrome을 업데이트하거나 탭 녹음 옵션으로 전환해 보세요.", + "description": "기타 시스템용 오디오 경고 설명" + }, + + "maxResolutionLabel": { + "message": "최대 해상도", + "description": "설정 메뉴에서 최대 해상도 레이블" + }, + "maxFPSLabel": { + "message": "최대 FPS", + "description": "설정 메뉴에서 최대 FPS 레이블" + }, + + "notEnoughRAM": { + "message": "RAM 부족", + "description": "설정 메뉴에서 'RAM 부족' 라벨" + }, + "resizeWindowLabel": { + "message": "창 크기 조절", + "description": "설정 메뉴의 창 크기 조절 레이블" + }, + "screenTooSmallTooltip": { + "message": "이 화면은 이 해상도로 조절하기에 너무 작습니다", + "description": "설정 메뉴의 화면 너무 작음 툴팁" + }, + "maxResolutionTooltip": { + "message": "귀하의 장치에서 이 해상도로 녹화할 수 없습니다", + "description": "설정 메뉴의 최대 해상도 툴팁" + }, + "permissionsModalReview": { + "message": "권한 검토", + "description": "권한 검토 버튼" + } +} diff --git a/build/_locales/pl/messages.json b/build/_locales/pl/messages.json new file mode 100644 index 0000000..1d90edd --- /dev/null +++ b/build/_locales/pl/messages.json @@ -0,0 +1,1040 @@ +{ + "extName": { + "message": "MyTechPassport - Nagrywarka & Edytor adnotacji", + "description": "Nazwa rozszerzenia" + }, + "extDesc": { + "message": "Najlepszy darmowy rejestrator ekranu bez ograniczeń. Przechwytuj, adnotuj, przybliżaj, rozmywaj, edytuj filmy i wiele więcej - bez konieczności logowania i przyjazny dla prywatności.", + "description": "Opis rozszerzenia" + }, + "recordTab": { + "message": "Nagrywaj", + "description": "Etykieta zakładki Nagrywaj na okienku popup" + }, + "videosTab": { + "message": "Twoje filmy", + "description": "Etykieta zakładki Twoje filmy na okienku popup" + }, + "screenType": { + "message": "Ekran", + "description": "Etykieta rodzaju nagrywania ekranu na okienku popup" + }, + "tabType": { + "message": "Obszar karty", + "description": "Etykieta rodzaju nagrywania obszaru karty na okienku popup" + }, + "cameraType": { + "message": "Kamera", + "description": "Etykieta rodzaju nagrywania kamery na okienku popup" + }, + "mockupType": { + "message": "Mockup", + "description": "Etykieta rodzaju nagrywania mockup na okienku popup" + }, + "customAreaRecordingDisabledTitle": { + "message": "Nagrywanie niestandardowego obszaru wyłączone", + "description": "Ostrzeżenie o wyłączonym nagrywaniu niestandardowego obszaru na okienku popup dla wersji Chrome starszych niż 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Zaktualizuj wersję Chrome do 110+", + "description": "Opis ostrzeżenia o wyłączonym nagrywaniu niestandardowego obszaru na okienku popup dla wersji Chrome starszych niż 104" + }, + "customAreaRecordingDisabledAction": { + "message": "Zaktualizuj", + "description": "Działanie w ostrzeżeniu o wyłączonym nagrywaniu niestandardowego obszaru na okienku popup dla wersji Chrome starszych niż 104" + }, + "permissionsModalTitle": { + "message": "Sprawdź swoje uprawnienia", + "description": "Tytuł modalnego okienka ostrzeżenia o uprawnieniach kamery / mikrofonu" + }, + "permissionsModalDescription": { + "message": "Wygląda na to, że MyTechPassport nie ma dostępu do twojej kamery lub mikrofonu. Upewnij się, że zezwoliłeś na dostęp, klikając ikonę kamery w pasku adresu.", + "description": "Opis modalnego okienka ostrzeżenia o uprawnieniach kamery / mikrofonu" + }, + "permissionsModalDismiss": { + "message": "Odrzuć", + "description": "Przycisk odrzucenia w modalnym okienku ostrzeżenia o uprawnieniach kamery / mikrofonu" + }, + "allowCameraAccessButton": { + "message": "Zezwól na dostęp do kamery", + "description": "Przycisk zezwalający na dostęp do kamery" + }, + "allowMicrophoneAccessButton": { + "message": "Zezwól na dostęp do mikrofonu", + "description": "Przycisk zezwalający na dostęp do mikrofonu" + }, + "pushToTalkLabel": { + "message": "Naciśnij, aby mówić", + "description": "Etykieta przełącznika Naciśnij, aby mówić" + }, + "customAreaLabel": { + "message": "Ustaw obszar do nagrywania", + "description": "Etykieta przełącznika Niestandardowy obszar" + }, + "flipCameraLabel": { + "message": "Obróć kamerę", + "description": "Etykieta przełącznika Obróć kamerę" + }, + "backgroundEffectsLabel": { + "message": "Efekty tła", + "description": "Etykieta przełącznika efektów tła" + }, + "recordButtonLabel": { + "message": "Rozpocznij nagrywanie", + "description": "Etykieta przycisku nagrywania" + }, + "recordButtonInProgressLabel": { + "message": "Rozpoczynanie nagrywania...", + "description": "Etykieta przycisku nagrywania w trakcie" + }, + "recordButtonNoCameraLabel": { + "message": "Wybierz kamerę do nagrywania", + "description": "Etykieta przycisku nagrywania w trybie kamery, gdy nie wybrano kamery" + }, + "showMoreOptionsLabel": { + "message": "Pokaż więcej opcji", + "description": "Etykieta przycisku Pokaż więcej opcji" + }, + + "systemAudioLabel": { + "message": "Uwzględnij dźwięk systemowy", + "description": "Etykieta dźwięku systemowego/karta" + }, + "hideToolbarLabel": { + "message": "Ukryj pasek narzędzi", + "description": "Etykieta ukrywania paska narzędzi" + }, + "countdownLabel": { + "message": "Odliczanie", + "description": "Etykieta odliczania" + }, + "alarmLabel": { + "message": "Ustaw limit czasu", + "description": "Etykieta alarmu" + }, + "blurTypeLabel": { + "message": "Rozmycie", + "description": "Etykieta rozmywania tła" + }, + "noneDropdownLabel": { + "message": "Brak", + "description": "Brak wybranej urządzenia" + }, + "noCameraDropdownLabel": { + "message": "Brak kamery", + "description": "Brak wybranej kamery" + }, + "noMicrophoneDropdownLabel": { + "message": "Brak mikrofonu", + "description": "Brak wybranego mikrofonu" + }, + "selectSourceDropdownPlaceholder": { + "message": "Wybierz źródło", + "description": "Etykieta miejsca na wybór źródła" + }, + "offLabel": { + "message": "Wyłączone", + "description": "Etykieta wyłączenia w rozwijanej liście" + }, + "regionWidthLabel": { + "message": "Szerokość", + "description": "Etykieta szerokości regionu" + }, + "regionHeightLabel": { + "message": "Wysokość", + "description": "Etykieta wysokości regionu" + }, + "addImageToastTitle": { + "message": "Kliknij, aby umieścić obraz", + "description": "Powiadomienie toast, które pojawia się podczas dodawania nowego obrazu" + }, + "finishRecordingTooltip": { + "message": "Zakończ nagrywanie", + "description": "Podpowiedź Zakończ nagrywanie" + }, + "restartRecordingTooltip": { + "message": "Rozpocznij nagrywanie ponownie", + "description": "Podpowiedź Rozpocznij nagrywanie ponownie" + }, + "pauseRecordingTooltip": { + "message": "Wstrzymaj nagrywanie", + "description": "Podpowiedź Wstrzymaj nagrywanie" + }, + "resumeRecordingTooltip": { + "message": "Wznów nagrywanie", + "description": "Podpowiedź Wznów nagrywanie" + }, + "cancelRecordingTooltip": { + "message": "Anuluj nagrywanie", + "description": "Podpowiedź Anuluj nagrywanie" + }, + "toggleDrawingToolsTooltip": { + "message": "Przełącz narzędzia do rysowania", + "description": "Podpowiedź Przełącz narzędzia do rysowania" + }, + "toggleBlurToolTooltip": { + "message": "Przełącz narzędzia do rozmywania", + "description": "Podpowiedź Przełącz narzędzia do rozmywania" + }, + "toggleCursorOptionsTooltip": { + "message": "Przełącz opcje kursora", + "description": "Podpowiedź Przełącz opcje kursora" + }, + "disableCameraTooltip": { + "message": "Wyłącz kamerę", + "description": "Podpowiedź Wyłącz kamerę" + }, + "enableCameraTooltip": { + "message": "Włącz kamerę", + "description": "Podpowiedź Włącz kamerę" + }, + "noCameraPermissionsTooltip": { + "message": "Brak uprawnień do kamery", + "description": "Podpowiedź Brak uprawnień do kamery" + }, + "disableMicrophoneTooltip": { + "message": "Wyłącz mikrofon", + "description": "Podpowiedź Wyłącz mikrofon" + }, + "enableMicrophoneTooltip": { + "message": "Włącz mikrofon", + "description": "Podpowiedź Włącz mikrofon" + }, + "noMicrophonePermissionsTooltip": { + "message": "Brak uprawnień do mikrofonu", + "description": "Podpowiedź Brak uprawnień do mikrofonu" + }, + "selectToolTooltip": { + "message": "Wybierz narzędzie", + "description": "Podpowiedź Wybierz narzędzie" + }, + "penToolTooltip": { + "message": "Narzędzie pióro", + "description": "Podpowiedź Narzędzie pióro" + }, + "highlighterToolTooltip": { + "message": "Narzędzie zakreślania", + "description": "Podpowiedź Narzędzie zakreślania" + }, + "eraserToolTooltip": { + "message": "Narzędzie gumki", + "description": "Podpowiedź Narzędzie gumki" + }, + "textToolTooltip": { + "message": "Narzędzie tekstowe", + "description": "Podpowiedź narzędzia tekstowego" + }, + "shapeToolTooltip": { + "message": "Narzędzie kształtów", + "description": "Podpowiedź narzędzia kształtów" + }, + "arrowToolTooltip": { + "message": "Narzędzie strzałki", + "description": "Podpowiedź narzędzia strzałki" + }, + "imageToolTooltip": { + "message": "Narzędzie obrazu", + "description": "Podpowiedź narzędzia obrazu" + }, + "undoTooltip": { + "message": "Cofnij", + "description": "Podpowiedź cofania" + }, + "redoTooltip": { + "message": "Ponów", + "description": "Podpowiedź ponawiania" + }, + "clearCanvasTooltip": { + "message": "Wyczyść płótno", + "description": "Podpowiedź wyczyszczenia płótna" + }, + "moreColorsTooltip": { + "message": "Więcej kolorów", + "description": "Podpowiedź więcej kolorów" + }, + "thickStrokeTooltip": { + "message": "Gruba kreska", + "description": "Podpowiedź grubej kreski" + }, + "mediumStrokeTooltip": { + "message": "Średnia kreska", + "description": "Podpowiedź średniej kreski" + }, + "thinStrokeTooltip": { + "message": "Cienka kreska", + "description": "Podpowiedź cienkiej kreski" + }, + "togglePictureinPictureModeTooltip": { + "message": "Przełącz tryb obraz w obrazie", + "description": "Podpowiedź przełączania trybu obraz w obrazie" + }, + "toggleFillTooltip": { + "message": "Włącz/wyłącz wypełnienie", + "description": "Podpowiedź włączania/wyłączania wypełnienia" + }, + "drawingModeToast": { + "message": "Tryb rysowania", + "description": "Komunikat trybu rysowania" + }, + "blurModeToast": { + "message": "Tryb rozmywania", + "description": "Komunikat trybu rozmywania" + }, + "clearBlurredElementsTooltip": { + "message": "Wyczyść wszystkie elementy rozmyte", + "description": "Podpowiedź wyczyszczenia wszystkich elementów rozmytych" + }, + "highlightClicksTooltip": { + "message": "Podświetl kliknięcia", + "description": "Podpowiedź podświetlania kliknięć" + }, + "highlightCursorTooltip": { + "message": "Podświetl kursor", + "description": "Podpowiedź podświetlania kursora" + }, + "spotlightCursorTooltip": { + "message": "Reflektor na kursorze", + "description": "Podpowiedź reflektora na kursorze" + }, + "permissionsModalNoShowAgain": { + "message": "Nie pokazuj ponownie", + "description": "Przycisk odrzucenia modalu uprawnień" + }, + "restartModalTitle": { + "message": "Czy na pewno chcesz zrestartować nagrywanie?", + "description": "Tytuł modalu restartowania nagrywania" + }, + "restartModalDescription": { + "message": "Bieżący postęp wideo zostanie utracony.", + "description": "Opis modalu restartowania nagrywania" + }, + "restartModalRestart": { + "message": "Zrestartuj nagrywanie", + "description": "Przycisk restartowania nagrywania" + }, + "restartModalResume": { + "message": "Wznów nagrywanie", + "description": "Przycisk wznowienia nagrywania" + }, + "discardModalTitle": { + "message": "Czy na pewno chcesz odrzucić nagranie?", + "description": "Tytuł modalu odrzucenia nagrania" + }, + "discardModalDescription": { + "message": "Bieżący postęp wideo zostanie utracony.", + "description": "Opis modalu odrzucenia nagrania" + }, + "discardModalDiscard": { + "message": "Odrzuć nagranie", + "description": "Przycisk odrzucenia nagrania" + }, + "discardModalResume": { + "message": "Wznów nagrywanie", + "description": "Przycisk wznowienia nagrywania" + }, + "recorderSelectTitle": { + "message": "Wybierz, co chcesz nagrać", + "description": "Tytuł na stronie nagrywania" + }, + "recorderSelectProgressTitle": { + "message": "Nagrywanie...", + "description": "Tytuł na stronie nagrywania podczas nagrywania" + }, + "recorderSelectDescription": { + "message": "Zachowaj tę kartę otwartą. Zostanie zamknięta po zapisaniu nagrania.", + "description": "Opis na stronie nagrywania" + }, + "sandboxProgressTitle": { + "message": "Przygotowanie nagrania...", + "description": "Tytuł na stronie piaskownicy podczas nagrywania/zapisywania" + }, + "sandboxProgressDescription": { + "message": "Zachowaj tę kartę otwartą. Zaktualizuje się z twoim nagraniem, gdy będzie gotowe.", + "description": "Opis na stronie piaskownicy podczas nagrywania/zapisywania" + }, + "sandboxEditorMainTitle": { + "message": "Edytor", + "description": "Tytuł w nawigacji strony edytora piaskownicy" + }, + "sandboxEditorCancelButton": { + "message": "Anuluj", + "description": "Przycisk anulowania na stronie edytora piaskownicy" + }, + "sandboxEditorRevertButton": { + "message": "Przywróć do oryginału", + "description": "Przycisk przywracania na stronie edytora piaskownicy" + }, + "sandboxEditorResetButton": { + "message": "Reset", + "description": "Przycisk resetowania na stronie edytora piaskownicy" + }, + "sandboxEditorSaveButton": { + "message": "Zapisz zmiany", + "description": "Przycisk zapisywania na stronie edytora piaskownicy" + }, + "sandboxEditorSaveProgressButton": { + "message": "Zapisywanie...", + "description": "Przycisk zapisywania na stronie edytora piaskownicy podczas zapisywania" + }, + "sandboxAudioDragAndDrop": { + "message": "Przeciągnij i upuść plik dźwiękowy", + "description": "Przeciągnij i upuść plik dźwiękowy na stronie edytora piaskownicy" + }, + "sandboxAudioOrBrowse": { + "message": "Lub kliknij, aby przeglądać", + "description": "Lub kliknij, aby przeglądać plik dźwiękowy na stronie edytora piaskownicy" + }, + "sandboxAudioSettingsTitle": { + "message": "Ustawienia", + "description": "Tytuł ustawień audio na stronie edytora piaskownicy" + }, + "sandboxAudioVolumeLabel": { + "message": "Głośność", + "description": "Etykieta głośności audio na stronie edytora piaskownicy" + }, + "sandboxAudioUpdateButton": { + "message": "Aktualizuj", + "description": "Przycisk aktualizacji audio na stronie edytora piaskownicy" + }, + "sandboxCropTitle": { + "message": "Przytnij", + "description": "Tytuł przytnij na stronie edytora piaskownicy" + }, + "widthLabel": { + "message": "Szerokość", + "description": "Etykieta szerokości dla właściwości" + }, + "heightLabel": { + "message": "Wysokość", + "description": "Etykieta wysokości dla właściwości" + }, + "leftLabel": { + "message": "Lewo", + "description": "Etykieta lewa dla właściwości" + }, + "topLabel": { + "message": "Góra", + "description": "Etykieta góra dla właściwości" + }, + "sandboxEditorTrimInfo": { + "message": "Przeciągnij uchwyty i użyj przycisków po lewej stronie, aby edytować wybrany fragment.", + "description": "Informacja o przycinaniu na stronie edytora piaskownicy" + }, + "sandboxEditorTrimButton": { + "message": "Przytnij wideo", + "description": "Przycisk przycinania na stronie edytora piaskownicy" + }, + "sandboxEditorTrimProgressButton": { + "message": "Przycinanie...", + "description": "Przycisk przycinania na stronie edytora piaskownicy podczas przycinania" + }, + "sandboxEditorCutButton": { + "message": "Wycięcie sekcji", + "description": "Przycisk wycinania na stronie edytora piaskownicy" + }, + "sandboxEditorCutProgressButton": { + "message": "Wycinanie...", + "description": "Przycisk wycinania na stronie edytora piaskownicy podczas wycinania" + }, + "sandboxEditorMuteButton": { + "message": "Wycisz dźwięk", + "description": "Przycisk wyciszania na stronie edytora piaskownicy" + }, + "sandboxEditorMuteProgressButton": { + "message": "Wyciszanie...", + "description": "Przycisk wyciszania na stronie edytora piaskownicy podczas wyciszania" + }, + "learnMoreDot": { + "message": "Dowiedz się więcej.", + "description": "Dowiedz się więcej z kropką" + }, + "undoLabel": { + "message": "Cofnij", + "description": "Etykieta cofnij" + }, + "redoLabel": { + "message": "Powtórz", + "description": "Etykieta powtórz" + }, + "leaveReview": { + "message": "Zostaw recenzję", + "description": "Przycisk napisz recenzję" + }, + "followForUpdates": { + "message": "Śledź aktualizacje", + "description": "Przycisk śledź aktualizacje" + }, + "offlineLabelTitle": { + "message": "Jesteś obecnie offline", + "description": "Etykieta offline" + }, + "offlineLabelDescription": { + "message": "Niektóre funkcje są niedostępne do ponownego połączenia", + "description": "Opis etykiety offline" + }, + "offlineLabelTryAgain": { + "message": "Spróbuj ponownie", + "description": "Przycisk etykiety offline Spróbuj ponownie" + }, + "updateChromeLabelTitle": { + "message": "Konieczna aktualizacja Chrome'a", + "description": "Etykieta aktualizacji Chrome'a" + }, + "updateChromeLabelDescription": { + "message": "Zaktualizuj, aby uzyskać dostęp do więcej funkcji", + "description": "Opis etykiety aktualizacji Chrome'a" + }, + "learnMoreLabel": { + "message": "Dowiedz się więcej", + "description": "Przycisk dowiedz się więcej" + }, + "overLimitLabelTitle": { + "message": "Film jest zbyt długi, aby przetwarzać lokalnie", + "description": "Etykieta limitu powyżej 5 minut w edytorze" + }, + "overLimitLabelDescription": { + "message": "Edycja i eksport do formatu MP4 są niedostępne", + "description": "Opis limitu powyżej 5 minut w edytorze" + }, + "videoProcessingLabelTitle": { + "message": "Wideo jest przetwarzane...", + "description": "Etykieta przetwarzania wideo w edytorze" + }, + "videoProcessingLabelDescription": { + "message": "Uaktualnij, aby przyspieszyć edycję", + "description": "Opis przetwarzania wideo w edytorze" + }, + "sandboxEditTitle": { + "message": "Edytuj", + "description": "Tytuł edytora w piaskownicy" + }, + "noConnectionLabel": { + "message": "Brak połączenia", + "description": "Etykieta braku połączenia" + }, + "notAvailableLabel": { + "message": "Niedostępne", + "description": "Etykieta niedostępności" + }, + "editButtonTitle": { + "message": "Edytuj wideo", + "description": "Przycisk etykiety przycinania" + }, + "editButtonDescription": { + "message": "Przytnij, wytnij lub wycisz wideo", + "description": "Etykieta przycinania" + }, + "preparingLabel": { + "message": "Przygotowywanie wideo, proszę czekać...", + "description": "Etykieta przygotowywania" + }, + "cropButtonTitle": { + "message": "Przytnij", + "description": "Przycisk etykiety przycinania" + }, + "cropButtonDescription": { + "message": "Przytnij i zmień rozmiar wideo", + "description": "Etykieta przycinania" + }, + "addAudioButtonTitle": { + "message": "Dodaj dźwięk", + "description": "Przycisk etykiety dodawania dźwięku" + }, + "addAudioButtonDescription": { + "message": "Prześlij własny dźwięk, aby dodać go do wideo", + "description": "Etykieta dodawania dźwięku" + }, + "sandboxSaveTitle": { + "message": "Zapisz", + "description": "Tytuł zapisu w edytorze w piaskownicy" + }, + "signOutDriveLabel": { + "message": "Wyloguj się z Dysku", + "description": "Etykieta wylogowania z Google Drive" + }, + "savingDriveLabel": { + "message": "Trwa zapisywanie...", + "description": "Etykieta zapisywania w Google Drive" + }, + "saveDriveButtonTitle": { + "message": "Zapisz w Dysku", + "description": "Przycisk zapisywania w Google Drive" + }, + "saveDriveButtonDescription": { + "message": "Zapisz bieżącą wersję w Google Drive", + "description": "Etykieta zapisywania w Google Drive" + }, + "signInDriveLabel": { + "message": "Zaloguj się i zapisz w Dysku", + "description": "Etykieta logowania do Google Drive" + }, + "sandboxExportTitle": { + "message": "Eksportuj", + "description": "Tytuł eksportu w edytorze w piaskownicy" + }, + "downloadingLabel": { + "message": "Pobieranie...", + "description": "Etykieta pobierania" + }, + "downloadWEBMButtonTitle": { + "message": "Pobierz jako .webm", + "description": "Przycisk pobierania jako WEBM" + }, + "downloadWEBMButtonDescription": { + "message": "Eksportuj wideo jako .webm", + "description": "Etykieta pobierania WEBM" + }, + "downloadMP4ButtonTitle": { + "message": "Pobierz jako .mp4", + "description": "Przycisk pobierania jako MP4" + }, + "downloadMP4ButtonDescription": { + "message": "Eksportuj wideo jako .mp4 (zalecane)", + "description": "Etykieta pobierania MP4" + }, + "downloadGIFButtonTitle": { + "message": "Pobierz jako .gif", + "description": "Przycisk pobierania jako GIF" + }, + "downloadGIFButtonDescription": { + "message": "Eksportuj jako GIF (maks. 30 sekund)", + "description": "Etykieta pobierania GIF" + }, + "shareModalSandboxTitle": { + "message": "Udostępnij swoje wideo innym osobom", + "description": "Tytuł okna modalnego udostępniania w edytorze w piaskownicy" + }, + "shareModalSandboxDescription": { + "message": "Wkrótce! Podaj swój adres e-mail, aby pozostać na bieżąco i otrzymywać powiadomienia, gdy dostępne będzie udostępnianie.", + "description": "Opis okna modalnego udostępniania w edytorze w piaskownicy" + }, + "shareModalSandboxButton": { + "message": "Dołącz do listy oczekujących", + "description": "Etykieta pola e-mail w oknie modalnym udostępniania w edytorze w piaskownicy" + }, + "shareSandboxButton": { + "message": "Udostępnij wideo", + "description": "Przycisk udostępniania w edytorze w piaskownicy" + }, + "replaceAudioEditor": { + "message": "Zamień istniejący dźwięk", + "description": "Przycisk zamiany dźwięku w edytorze" + }, + "zoomToPointPopup": { + "message": "Powiększ do kursora", + "description": "Okno modalne powiększenia do punktu" + }, + "stayInPagePopup": { + "message": "Zostań na stronie podczas nagrywania", + "description": "Okno modalne pozostawania na stronie" + }, + "micReminderPopup": { + "message": "Ostrzeżenie o wyłączonym mikrofonie", + "description": "Okno modalne przypomnienia o mikrofonie" + }, + "helpPopup": { + "message": "Pomoc", + "description": "Przycisk okna modalnego pomocy" + }, + "pausedRecordingToast": { + "message": "Nagrywanie wstrzymane. Naciśnij przycisk odtwarzania, aby wznowić.", + "description": "Tytuł modalnego powiadomienia o wstrzymanym nagrywaniu" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport nie ma uprawnień do nagrywania twojego ekranu", + "description": "Tytuł okna modalnego z uprawnieniami" + }, + "chromePermissionsModalDescription": { + "message": "Aby włączyć nagrywanie ekranu, musisz udzielić MyTechPassport uprawnień do przechwytywania twojego ekranu, gdy zostaniesz o to poproszony.", + "description": "Opis okna modalnego z uprawnieniami" + }, + "chromePermissionsModalAction": { + "message": "Włącz nagrywanie ekranu", + "description": "Akcja w oknie modalnym z uprawnieniami" + }, + "chromePermissionsModalCancel": { + "message": "Anuluj", + "description": "Anuluj w oknie modalnym z uprawnieniami" + }, + "micMutedModalTitle": { + "message": "Twój mikrofon jest wyciszony", + "description": "Tytuł modalnego komunikatu o wyciszonym mikrofonie" + }, + "micMutedModalDescription": { + "message": "Aby uwzględnić dźwięk w nagraniu, musisz włączyć mikrofon. Czy chcesz kontynuować bez dźwięku?", + "description": "Opis modalnego komunikatu o wyciszonym mikrofonie" + }, + "micMutedModalAction": { + "message": "Tak, kontynuuj", + "description": "Akcja w modalnym komunikacie o wyciszonym mikrofonie" + }, + "micMutedModalCancel": { + "message": "Anuluj", + "description": "Anuluj w modalnym komunikacie o wyciszonym mikrofonie" + }, + "setupTitle": { + "message": "Rozpocznij korzystanie z MyTechPassport w trzech prostych krokach:", + "description": "Tytuł kroków konfiguracji" + }, + "setupStep1Before": { + "message": "1- Kliknij ikonę ", + "description": "Krok 1 konfiguracji, przed ikoną. Wymaga spacji na końcu." + }, + "setupStep1After": { + "message": " rozszerzeń", + "description": "Krok 1 konfiguracji, po ikonie. Wymaga spacji na początku." + }, + "setupStep2Before": { + "message": "2- Naciśnij ikonę ", + "description": "Krok 2 konfiguracji, przed ikoną. Wymaga spacji na końcu." + }, + "setupStep2After": { + "message": " pinek", + "description": "Krok 2 konfiguracji, po ikonie. Wymaga spacji na początku." + }, + "setupStep3Before": { + "message": "3- Kliknij ikonę ", + "description": "Krok 3 konfiguracji, przed ikoną. Wymaga spacji na końcu." + }, + "setupStep3After": { + "message": " MyTechPassport, aby rozpocząć", + "description": "Krok 3 konfiguracji, po ikonie. Wymaga spacji na początku." + }, + "setupCompleteTitle": { + "message": "Super! Wszystko gotowe", + "description": "Tytuł komunikatu o zakończeniu konfiguracji" + }, + "setupCompleteDescription": { + "message": "Teraz możesz rozpocząć nagrywanie tutaj lub w innej karcie.", + "description": "Opis komunikatu o zakończeniu konfiguracji" + }, + "clickHereDrawOnboarding": { + "message": "Kliknij tutaj, aby rysować", + "description": "Komunikat o kliknięciu tutaj" + }, + "countdownMessage": { + "message": "Spokojnie. Kliknij gdziekolwiek, aby zatrzymać odliczanie.", + "description": "Komunikat odliczania" + }, + "sandboxEditorTooSmallInfo": { + "message": "Edycje mogą być niedokładne dla krótkich zakresów czasowych z powodu interwałów między klatkami.", + "description": "Informacja o zbyt małym edytorze" + }, + "processingBannerEditor": { + "message": "Wideo jest przetwarzane, odtwarzanie może być niedokładne lub przerwane.", + "description": "Baner przetwarzania w edytorze" + }, + "croppingInfoTitle": { + "message": "Przycinanie może chwilę potrwać", + "description": "Tytuł informacji o przycinaniu" + }, + "croppingInfoDescription": { + "message": "Uaktualnij, aby przyspieszyć przetwarzanie", + "description": "Opis informacji o przycinaniu" + }, + "micOnToast": { + "message": "Mikrofon włączony", + "description": "Tytuł modalnego komunikatu o włączonym mikrofonie" + }, + "micOffToast": { + "message": "Mikrofon wyłączony", + "description": "Tytuł modalnego komunikatu o wyłączonym mikrofonie" + }, + "hideUIAlerts": { + "message": "Ukryj powiadomienia interfejsu", + "description": "Przycisk ukrywania alertów interfejsu" + }, + "noShowAgain": { + "message": "Nie pokazuj ponownie", + "description": "Przycisk nie pokazuj ponownie" + }, + "toolbarHoverOnly": { + "message": "Ukryj pasek narzędzi, gdy nie jest używany", + "description": "Pokaż pasek narzędzi tylko po najechaniu myszką" + }, + "stopRecording": { + "message": "Zatrzymaj nagrywanie", + "description": "Przycisk zatrzymywania nagrywania na ekranie nagrywania" + }, + "updateAnnouncementTitle": { + "message": "Witaj w nowym MyTechPassportsport!", + "description": "Tytuł ogłoszenia o aktualizacji dla istniejących użytkowników" + }, + "updateAnnouncementDescription": { + "message": "Przedstawiamy nowy wygląd i wiele ekscytujących funkcji, ale nie martw się, to nadal ta sama darmowa, prywatna i otwarta rozszerzenie, które znasz i kochasz.", + "description": "Opis ogłoszenia o aktualizacji dla istniejących użytkowników" + }, + "updateAnnouncementLearnMore": { + "message": "Dowiedz się więcej o aktualizacji.", + "description": "Link do dowiedzenia się więcej o aktualizacji w ogłoszeniu dla istniejących użytkowników" + }, + "updateAnnouncementButton": { + "message": "Rozpocznij", + "description": "Przycisk w ogłoszeniu o aktualizacji dla istniejących użytkowników" + }, + "streamErrorModalTitle": { + "message": "Błąd podczas rozpoczynania nagrywania", + "description": "Tytuł okna modalnego błędu strumienia" + }, + "streamErrorModalDescription": { + "message": "Wygląda na to, że wystąpił błąd podczas rozpoczynania nagrywania. Uruchom przeglądarkę ponownie i spróbuj jeszcze raz. Jeśli problem będzie się utrzymywał, skontaktuj się z nami pod adresem support@MyTechPassportsport.io.", + "description": "Opis okna modalnego błędu strumienia" + }, + "highestQuality": { + "message": "Najwyższa jakość", + "description": "Etykieta przełącznika na najwyższą jakość w okienku" + }, + "restoreRecording": { + "message": "Przywróć ostatnie nagranie", + "description": "Przycisk przywracania ostatniego nagrania w okienku" + }, + "havingIssuesButton": { + "message": "Masz problemy?", + "description": "Przycisk problemów w edytorze" + }, + "havingIssuesModalTitle": { + "message": "Nie widzisz swojego nagrania?", + "description": "Tytuł okna modalnego problemów w edytorze" + }, + "havingIssuesModalDescription": { + "message": "Jeśli ukończyłeś nagrywanie i znajdujesz się na tej stronie, nie widząc swojego filmu, możesz spróbować pobrać surowe dane wideo, jeśli są dostępne. Możesz również skontaktować się z nami i zgłosić błąd.", + "description": "Opis okna modalnego problemów w edytorze" + }, + "havingIssuesModalButton": { + "message": "Pobierz surowe dane wideo", + "description": "Przycisk w oknie modalnym problemów w edytorze" + }, + "havingIssuesModalButton2": { + "message": "Zgłoś błąd", + "description": "Drugi przycisk w oknie modalnym problemów w edytorze" + }, + "noRecordingFound": { + "message": "Nie znaleziono nagrania, przepraszamy :(", + "description": "Komunikat o braku nagrania w edytorze" + }, + "memoryLimitTitle": { + "message": "Osiągnięto limit pamięci", + "description": "Tytuł komunikatu o osiągniętym limicie pamięci" + }, + "memoryLimitDescription": { + "message": "Twój urządzenie wyczerpało dostępną pamięć do nagrywania, co spowodowało automatyczne zakończenie nagrywania. Jeśli chcesz nagrywać dłużej, możesz spróbować zmniejszyć jakość nagrania lub zwolnić miejsce na urządzeniu.", + "description": "Opis komunikatu o osiągniętym limicie pamięci" + }, + "understoodButton": { + "message": "Rozumiem", + "description": "Przycisk Rozumiem" + }, + "notEnoughSpaceTitle": { + "message": "Za mało miejsca", + "description": "Tytuł komunikatu o braku miejsca" + }, + "notEnoughSpaceDescription": { + "message": "Aby korzystać z MyTechPassport, potrzebujesz co najmniej 1 GB wolnej przestrzeni. Proszę zwolnij miejsce na urządzeniu i spróbuj ponownie.", + "description": "Opis komunikatu o braku miejsca" + }, + "clearSpaceButton": { + "message": "Usuń poprzednie nagrania", + "description": "Przycisk Usuń poprzednie nagrania" + }, + "sandboxAdvancedTitle": { + "message": "Zaawansowane", + "description": "Sekcja zaawansowana na stronie edytora w trybie piaskownicy" + }, + "rawRecordingButtonTitle": { + "message": "Pobierz surowy plik wideo", + "description": "Przycisk pobierania surowego nagrania" + }, + "rawRecordingButtonDescription": { + "message": "Eksportuj oryginalne dane nagrania", + "description": "Etykieta pobierania surowego nagrania" + }, + "troubleshootButtonTitle": { + "message": "Pomoc dotycząca nagrania", + "description": "Przycisk Rozwiązywania problemów" + }, + "troubleShootButtonDescription": { + "message": "Przywróć nagranie wideo i rozwiąż inne problemy", + "description": "Etykieta Rozwiązywania problemów" + }, + "rawRecordingModalTitle": { + "message": "Pobierz surowy plik wideo", + "description": "Tytuł okna modalnego surowego nagrania" + }, + "rawRecordingModalDescription": { + "message": "Surowy plik wideo to oryginalny plik wideo nagrany przez MyTechPassport. Ten film nie został przetworzony ani zedytowany, dlatego może być bardzo duży i niekoniecznie da się go odtworzyć na wszystkich urządzeniach. Jeśli masz problemy z przetworzonym filmem, możesz użyć tego pliku do odzyskania swojego nagrania.", + "description": "Opis okna modalnego surowego nagrania" + }, + "rawRecordingModalButton": { + "message": "Pobierz", + "description": "Przycisk okna modalnego surowego nagrania" + }, + "troubleshootModalTitle": { + "message": "Pobierz informacje o systemie i dane wideo do rozwiązywania problemów", + "description": "Tytuł okna modalnego Rozwiązywania problemów" + }, + "troubleshootModalDescription": { + "message": "Po pobraniu prześlij ten plik na adres support@MyTechPassport.io wraz z wszelkimi istotnymi informacjami. Będziemy używać tych danych, aby pomóc ci rozwiązać problemy z rozszerzeniem i, jeśli to możliwe, odzyskać twoje nagranie wideo.", + "description": "Opis okna modalnego Rozwiązywania problemów" + }, + "troubleshootModalButton": { + "message": "Pobierz", + "description": "Przycisk okna modalnego Rozwiązywania problemów" + }, + "overLimitModalTitle": { + "message": "Film jest zbyt długi, aby przetworzyć na tym urządzeniu", + "description": "Tytuł okna modalnego z limitem ponad 5 minut" + }, + "overLimitModalDescription": { + "message": "Ponieważ MyTechPassport działa w sposób całkowicie prywatny i lokalnie, jest ograniczane przez sprzęt twojego urządzenia. Przetwarzanie filmu o tej długości zajęłoby zbyt dużo czasu i byłoby bardzo intensywne z punktu widzenia zasobów. Nie martw się, nadal możesz pobrać plik WEBM lub surowe nagranie, ale edycja i eksport do formatu MP4 nie są dostępne. Mimo to nadal możesz spróbować przetworzyć film, jeśli rozumiesz związane z tym ryzyko.", + "description": "Opis okna modalnego z limitem ponad 5 minut" + }, + "overLimitModalButton": { + "message": "Rozumiem ryzyko, spróbuj mimo to", + "description": "Przycisk okna modalnego z limitem ponad 5 minut" + }, + "overLimitModalLearnMore": { + "message": "Dowiedz się więcej na temat przetwarzania długich filmów.", + "description": "Link „Dowiedz się więcej” w oknie modalnym z limitem ponad 5 minut z kropką" + }, + "recoveryModeTitle": { + "message": "Tryb odzyskiwania", + "description": "Tytuł trybu odzyskiwania" + }, + + "downloadForTroubleshootingOption": { + "message": "Pobierz dane do rozwiązywania problemów", + "description": "Opcja pobierania do rozwiązywania problemów" + }, + "getHelpNav": { + "message": "Centrum Pomocy", + "description": "Element nawigacyjny pomocy" + }, + "audioWarningTitle": { + "message": "Nagrywanie dźwięku z strony", + "description": "Tytuł ostrzeżenia dźwiękowego" + }, + "audioWarningDescription": { + "message": "Aby nagrać dźwięk z tej strony, musisz użyć opcji '$tab$'.", + "description": "Opis ostrzeżenia dźwiękowego", + "placeholders": { + "tab": { + "content": "$1", + "example": "Obszar karty" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Rozszerzenie nieobsługiwane na tej stronie", + "description": "Tytuł ostrzeżenia o nieobsługiwanym rozszerzeniu na karcie" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport nie był obsługiwany na twojej poprzedniej karcie. Mimo to, możesz rozpocząć nagrywanie tutaj, a następnie przejść na inną kartę, ale kamera i pasek narzędzi nie będą widoczne.", + "description": "Opis ostrzeżenia o nieobsługiwanym rozszerzeniu na karcie" + }, + "backupsTitle": { + "message": "Skonfiguruj lokalne kopie zapasowe dla swoich nagranek w MyTechPassport", + "description": "Tytuł kopii zapasowych" + }, + "backupsDescription1": { + "message": "Zachowaj kopię wszystkich nagranych materiałów. Jeśli nie skonfigurujesz kopii zapasowej, twoje nagrania zostaną zapisane tylko wtedy, gdy zdecydujesz się je pobrać.", + "description": "Opis kopii zapasowych" + }, + "backupsDescription2": { + "message": "Możesz potrzebować utworzyć nowy folder najpierw, jeśli próbujesz zapisać nagrania w folderach takich jak 'Pobrane' lub inne foldery systemowe.", + "description": "Opis kopii zapasowych" + }, + "backupsSelectFolder": { + "message": "Wybierz folder", + "description": "Przycisk Wybierz folder" + }, + "backupsNotNow": { + "message": "Nie teraz", + "description": "Przycisk Nie teraz" + }, + "backupsOnTitle": { + "message": "Twoje nagrania są lokalnie synchronizowane", + "description": "Tytuł aktywowanych kopii zapasowych" + }, + "backupsOnDescription": { + "message": "Aby uniknąć prośby o uprawnienia za każdym razem, gdy nagrywasz, zalecamy pozostawienie tej karty otwartej.", + "description": "Opis aktywowanych kopii zapasowych" + }, + "backupsClose": { + "message": "Zamknij kartę mimo wszystko", + "description": "Przycisk Zamknij kartę mimo wszystko" + }, + "backupsStop": { + "message": "Zatrzymaj wszystkie kopie zapasowe nagrań", + "description": "Przycisk Zatrzymaj kopie zapasowe" + }, + "backupsConfirmTitle": { + "message": "Proszę potwierdź dostęp do lokalnego folderu kopii zapasowych MyTechPassport", + "description": "Tytuł potwierdzenia kopii zapasowych" + }, + "backupsConfirmDescription": { + "message": "Przykro nam, ale potrzebujemy Twojej zgody jeszcze raz, aby kontynuować tworzenie lokalnych kopii zapasowych Twoich nagrań. Niestety będziemy musieli pytać za każdym razem, gdy zamkniesz tę kartę, co może się zdarzyć, jeśli zamkniesz przeglądarkę lub zrestartujesz komputer.", + "description": "Opis potwierdzenia kopii zapasowych" + }, + "backupsConfirmAllow": { + "message": "Zezwól MyTechPassport na kontynuowanie tworzenia kopii zapasowych nagrań", + "description": "Przycisk Zezwól w potwierdzeniu kopii zapasowych" + }, + "backupsToggle": { + "message": "Tworzenie kopii zapasowych nagrań", + "description": "Etykieta Przełącz kopie zapasowe" + }, + "backupPermissionFailTitle": { + "message": "Odmowa uprawnień do tworzenia kopii zapasowych nagrania", + "description": "Tytuł niepowodzenia uprawnień kopii zapasowych" + }, + "backupPermissionFailDescription": { + "message": "Nie wybrałeś folderu do tworzenia lokalnych kopii zapasowych nagrań. W zależności od wersji przeglądarki lub systemu operacyjnego, możesz być proszony o wybranie folderu za każdym razem, gdy rozpoczniesz nagrywanie. Możesz spróbować ponownie lub całkowicie wyłączyć kopie zapasowe, jeśli wolisz nie udzielać uprawnień wielokrotnie.", + "description": "Opis niepowodzenia uprawnień kopii zapasowych" + }, + "recordAudioWarningMacTitle": { + "message": "Nagrywanie dźwięku z komputera", + "description": "Tytuł ostrzeżenia dźwiękowego dla macOS" + }, + "recordAudioWarningMacDescription": { + "message": "W systemie macOS możesz nagrywać dźwięk tylko z zakładek. Wybierz opcję 'Zakładka Chrome' i upewnij się, że opcja 'Udostępnij także dźwięk zakładki' jest włączona.", + "description": "Opis ostrzeżenia dźwiękowego dla macOS" + }, + "recordAudioWarningOtherTitle": { + "message": "Nagrywanie dźwięku z komputera", + "description": "Tytuł ostrzeżenia dźwiękowego dla innych systemów" + }, + "recordAudioWarningOtherDescription": { + "message": "Aby nagrać dźwięk z komputera, upewnij się, że opcja 'Udostępnij dźwięk systemowy' jest włączona. Jeśli nie widzisz tej opcji, spróbuj zaktualizować Chrome lub przełączyć się na opcję nagrywania zakładek.", + "description": "Opis ostrzeżenia dźwiękowego dla innych systemów" + }, + + "maxResolutionLabel": { + "message": "Maksymalna rozdzielczość", + "description": "Etykieta maksymalnej rozdzielczości w menu ustawień" + }, + "maxFPSLabel": { + "message": "Maksymalna ilość kl./s", + "description": "Etykieta maksymalnej ilości kl./s w menu ustawień" + }, + + "notEnoughRAM": { + "message": "Za mało pamięci RAM", + "description": "Etykieta 'Za mało pamięci RAM' w menu ustawień" + }, + "resizeWindowLabel": { + "message": "Zmień rozmiar okna", + "description": "Etykieta opcji zmiany rozmiaru okna w menu ustawień" + }, + "screenTooSmallTooltip": { + "message": "Ekran jest zbyt mały, by zmienić rozmiar na tę rozdzielczość", + "description": "Etykieta ostrzeżenia o zbyt małym ekranie w menu ustawień" + }, + "maxResolutionTooltip": { + "message": "Nie można nagrywać w tej rozdzielczości na tym urządzeniu", + "description": "Etykieta ostrzeżenia o maksymalnej rozdzielczości w menu ustawień" + }, + "permissionsModalReview": { + "message": "Przejrzyj uprawnienia", + "description": "Etykieta przycisku przejrzenia uprawnień w oknie dialogowym uprawnień" + } +} diff --git a/build/_locales/pt_BR/messages.json b/build/_locales/pt_BR/messages.json new file mode 100644 index 0000000..46e7318 --- /dev/null +++ b/build/_locales/pt_BR/messages.json @@ -0,0 +1,1038 @@ +{ + "extName": { + "message": "MyTechPassport - Grave e faça anotações na tela", + "description": "Nome da extensão" + }, + "extDesc": { + "message": "O melhor gravador de tela gratuito para o Chrome, sem limitações. Capture, faça anotações, dê zoom, desfoque, edite vídeos e muito mais - sem a necessidade de registro, totalmente privado e gratuito.", + "description": "Descrição da extensão" + }, + "recordTab": { + "message": "Gravar", + "description": "Etiqueta da página de gravação no popup" + }, + "videosTab": { + "message": "Seus vídeos", + "description": "Etiqueta da página de vídeos no popup" + }, + "screenType": { + "message": "Tela", + "description": "Etiqueta de tipo de gravação de tela no popup" + }, + "tabType": { + "message": "Área", + "description": "Etiqueta de tipo de gravação de área de página no popup" + }, + "cameraType": { + "message": "Câmera", + "description": "Etiqueta de tipo de gravação de câmera no popup" + }, + "mockupType": { + "message": "Mockup", + "description": "Etiqueta de tipo de gravação de mockup no popup" + }, + "customAreaRecordingDisabledTitle": { + "message": "Gravação de área personalizada desativada", + "description": "Aviso de gravação de área personalizada desativada para versões do Chrome anteriores à 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Atualize a versão do Chrome para 110+", + "description": "Descrição do aviso de gravação de área personalizada desativada para versões do Chrome anteriores à 104" + }, + "customAreaRecordingDisabledAction": { + "message": "Atualizar", + "description": "Ação do aviso de gravação de área personalizada desativada para versões do Chrome anteriores à 104" + }, + "permissionsModalTitle": { + "message": "Verifique suas permissões", + "description": "Título do modal de aviso de permissões de câmera/microfone" + }, + "permissionsModalDescription": { + "message": "Parece que o MyTechPassport não consegue acessar sua câmera ou microfone. Certifique-se de permitir o acesso clicando no ícone da câmera na barra de endereço.", + "description": "Descrição do modal de aviso de permissões de câmera/microfone" + }, + "permissionsModalDismiss": { + "message": "Ignorar", + "description": "Botão de ignorar no modal de aviso de permissões de câmera/microfone" + }, + "allowCameraAccessButton": { + "message": "Permitir acesso à câmera", + "description": "Botão de permitir acesso à câmera" + }, + "allowMicrophoneAccessButton": { + "message": "Permitir acesso ao microfone", + "description": "Botão de permitir acesso ao microfone" + }, + "pushToTalkLabel": { + "message": "Pressione para falar", + "description": "Etiqueta do interruptor pressionar para falar" + }, + "customAreaLabel": { + "message": "Definir uma área para gravar", + "description": "Etiqueta do interruptor de área personalizada" + }, + "flipCameraLabel": { + "message": "Inverter câmera", + "description": "Etiqueta do interruptor de inverter câmera" + }, + "backgroundEffectsLabel": { + "message": "Efeitos de fundo", + "description": "Etiqueta do interruptor de efeitos de fundo" + }, + "recordButtonLabel": { + "message": "Iniciar gravação", + "description": "Etiqueta do botão de gravar" + }, + "recordButtonNoCameraLabel": { + "message": "Defina uma câmera para gravar", + "description": "Rótulo do botão de gravação quando no modo de câmera e nenhuma câmera está selecionada" + }, + "recordButtonInProgressLabel": { + "message": "Iniciando gravação...", + "description": "Etiqueta em progresso do botão de gravar" + }, + "showMoreOptionsLabel": { + "message": "Mostrar mais opções", + "description": "Etiqueta de mostrar mais opções" + }, + + "systemAudioLabel": { + "message": "Incluir áudio do sistema", + "description": "Rótulo de áudio do sistema/guia" + }, + "hideToolbarLabel": { + "message": "Ocultar barra de ferramentas", + "description": "Etiqueta de ocultar barra de ferramentas" + }, + "countdownLabel": { + "message": "Contagem decrescente", + "description": "Etiqueta de contagem decrescente" + }, + "alarmLabel": { + "message": "Definir um limite de tempo", + "description": "Etiqueta de alarme" + }, + "blurTypeLabel": { + "message": "Desfoque", + "description": "Etiqueta de desfoque de fundo" + }, + "noneDropdownLabel": { + "message": "Nenhum", + "description": "Nenhum dispositivo selecionado" + }, + "noCameraDropdownLabel": { + "message": "Sem câmera", + "description": "Nenhuma câmera selecionada" + }, + "noMicrophoneDropdownLabel": { + "message": "Sem microfone", + "description": "Nenhum microfone selecionado" + }, + "selectSourceDropdownPlaceholder": { + "message": "Selecionar uma fonte", + "description": "Marcador de posição para selecionar fonte" + }, + "offLabel": { + "message": "Desligado", + "description": "Etiqueta de desligado no menu suspenso" + }, + "regionWidthLabel": { + "message": "Largura", + "description": "Etiqueta de largura de região" + }, + "regionHeightLabel": { + "message": "Altura", + "description": "Etiqueta de altura de região" + }, + "addImageToastTitle": { + "message": "Clique para adicionar uma imagem", + "description": "Brinde que aparece ao adicionar uma nova imagem" + }, + "finishRecordingTooltip": { + "message": "Terminar gravação", + "description": "Dica para terminar a gravação" + }, + "restartRecordingTooltip": { + "message": "Reiniciar gravação", + "description": "Dica para reiniciar a gravação" + }, + "pauseRecordingTooltip": { + "message": "Pausar gravação", + "description": "Dica para pausar a gravação" + }, + "resumeRecordingTooltip": { + "message": "Continuar gravação", + "description": "Dica para continuar a gravação" + }, + "cancelRecordingTooltip": { + "message": "Cancelar gravação", + "description": "Dica para cancelar a gravação" + }, + "toggleDrawingToolsTooltip": { + "message": "Ferramentas de desenho", + "description": "Dica para alternar ferramentas de desenho" + }, + "toggleBlurToolTooltip": { + "message": "Ferramenta de desfoque", + "description": "Dica para alternar ferramentas de desfoque" + }, + "toggleCursorOptionsTooltip": { + "message": "Opções de cursor", + "description": "Dica para alternar opções de cursor" + }, + "disableCameraTooltip": { + "message": "Desativar câmera", + "description": "Dica para desativar a câmera" + }, + "enableCameraTooltip": { + "message": "Ativar câmera", + "description": "Dica para ativar a câmera" + }, + "noCameraPermissionsTooltip": { + "message": "Sem permissões de câmera", + "description": "Dica para sem permissões de câmera" + }, + "disableMicrophoneTooltip": { + "message": "Desativar microfone", + "description": "Dica para desativar o microfone" + }, + "enableMicrophoneTooltip": { + "message": "Ativar microfone", + "description": "Dica para ativar o microfone" + }, + "noMicrophonePermissionsTooltip": { + "message": "Sem permissões de microfone", + "description": "Dica para sem permissões de microfone" + }, + "selectToolTooltip": { + "message": "Selecionar ferramenta", + "description": "Dica para selecionar ferramenta" + }, + "penToolTooltip": { + "message": "Ferramenta de caneta", + "description": "Dica para ferramenta de caneta" + }, + "highlighterToolTooltip": { + "message": "Ferramenta de marcador", + "description": "Dica para ferramenta de marcador" + }, + "eraserToolTooltip": { + "message": "Ferramenta de borracha", + "description": "Dica para ferramenta de borracha" + }, + "textToolTooltip": { + "message": "Ferramenta de texto", + "description": "Dica para ferramenta de texto" + }, + "shapeToolTooltip": { + "message": "Ferramenta de formas", + "description": "Dica para ferramenta de formas" + }, + "arrowToolTooltip": { + "message": "Ferramenta de seta", + "description": "Dica para ferramenta de seta" + }, + "imageToolTooltip": { + "message": "Ferramenta de imagem", + "description": "Dica para ferramenta de imagem" + }, + "undoTooltip": { + "message": "Desfazer", + "description": "Dica para desfazer" + }, + "redoTooltip": { + "message": "Refazer", + "description": "Dica para refazer" + }, + "clearCanvasTooltip": { + "message": "Limpar tela", + "description": "Dica para limpar tela" + }, + "moreColorsTooltip": { + "message": "Mais cores", + "description": "Dica para mais cores" + }, + "thickStrokeTooltip": { + "message": "Traço grosso", + "description": "Dica para traço grosso" + }, + "mediumStrokeTooltip": { + "message": "Traço médio", + "description": "Dica para traço médio" + }, + "thinStrokeTooltip": { + "message": "Traço fino", + "description": "Dica de traço fino" + }, + "togglePictureinPictureModeTooltip": { + "message": "Alternar modo Picture-in-Picture (PIP)", + "description": "Dica de alternar modo Picture-in-Picture" + }, + "toggleFillTooltip": { + "message": "Alternar preenchimento", + "description": "Dica de alternar preenchimento" + }, + "drawingModeToast": { + "message": "Modo de desenho", + "description": "Brinde de modo de desenho" + }, + "blurModeToast": { + "message": "Modo de desfoque", + "description": "Brinde de modo de desfoque" + }, + "clearBlurredElementsTooltip": { + "message": "Limpar todos os elementos desfocados", + "description": "Dica de limpar todos os elementos desfocados" + }, + "highlightClicksTooltip": { + "message": "Destacar cliques", + "description": "Dica de destacar cliques" + }, + "highlightCursorTooltip": { + "message": "Destacar cursor", + "description": "Dica de destacar cursor" + }, + "spotlightCursorTooltip": { + "message": "Foco no cursor", + "description": "Dica de foco no cursor" + }, + "permissionsModalNoShowAgain": { + "message": "Não mostrar novamente", + "description": "Botão de fechar modal de permissões" + }, + "restartModalTitle": { + "message": "Você tem certeza de que deseja reiniciar a gravação?", + "description": "Título do modal de reiniciar gravação" + }, + "restartModalDescription": { + "message": "Seu progresso no vídeo será perdido.", + "description": "Descrição do modal de reiniciar gravação" + }, + "restartModalRestart": { + "message": "Reiniciar gravação", + "description": "Botão de reiniciar gravação no modal" + }, + "restartModalResume": { + "message": "Continuar gravação", + "description": "Botão de continuar gravação no modal" + }, + "discardModalTitle": { + "message": "Você tem certeza de que deseja descartar a gravação?", + "description": "Título do modal de descartar gravação" + }, + "discardModalDescription": { + "message": "Seu progresso no vídeo será perdido.", + "description": "Descrição do modal de descartar gravação" + }, + "discardModalDiscard": { + "message": "Descartar gravação", + "description": "Botão de descartar gravação no modal" + }, + "discardModalResume": { + "message": "Continuar gravação", + "description": "Botão de continuar gravação no modal" + }, + "recorderSelectTitle": { + "message": "Escolha o que deseja gravar", + "description": "Título na página de gravação" + }, + "recorderSelectProgressTitle": { + "message": "Gravando...", + "description": "Título na página de gravação durante a gravação" + }, + "recorderSelectDescription": { + "message": "Mantenha esta guia aberta. Ela será fechada assim que sua gravação for salva.", + "description": "Descrição na página de gravação" + }, + "sandboxProgressTitle": { + "message": "Preparando a gravação...", + "description": "Título na página de testes durante a gravação/salvamento" + }, + "sandboxProgressDescription": { + "message": "Mantenha esta guia aberta. Ela será atualizada com sua gravação quando estiver pronta.", + "description": "Descrição na página de testes durante a gravação/salvamento" + }, + "sandboxEditorMainTitle": { + "message": "Editor", + "description": "Título na navegação da página do editor de testes" + }, + "sandboxEditorCancelButton": { + "message": "Cancelar", + "description": "Botão de cancelar na página do editor de testes" + }, + "sandboxEditorRevertButton": { + "message": "Reverter para o original", + "description": "Botão de reverter na página do editor de testes" + }, + "sandboxEditorResetButton": { + "message": "Redefinir", + "description": "Botão de redefinir na página do editor de testes" + }, + "sandboxEditorSaveButton": { + "message": "Salvar alterações", + "description": "Botão de salvar na página do editor de testes" + }, + "sandboxEditorSaveProgressButton": { + "message": "Salvando...", + "description": "Botão de salvar na página do editor de testes durante o salvamento" + }, + "sandboxAudioDragAndDrop": { + "message": "Arraste seu arquivo de áudio", + "description": "Arraste e solte arquivo de áudio na página do editor de testes" + }, + "sandboxAudioOrBrowse": { + "message": "Ou clique para procurar", + "description": "Ou clique para procurar arquivo de áudio na página do editor de testes" + }, + "sandboxAudioSettingsTitle": { + "message": "Configurações de áudio", + "description": "Título de configurações de áudio na página do editor de testes" + }, + "sandboxAudioVolumeLabel": { + "message": "Volume", + "description": "Rótulo de volume de áudio na página do editor de testes" + }, + "sandboxAudioUpdateButton": { + "message": "Aplicar", + "description": "Botão de atualizar áudio na página do editor de testes" + }, + "sandboxCropTitle": { + "message": "Recortar", + "description": "Título de recorte na página do editor de testes" + }, + "widthLabel": { + "message": "Largura", + "description": "Rótulo de largura para propriedades" + }, + "heightLabel": { + "message": "Altura", + "description": "Rótulo de altura para propriedades" + }, + "leftLabel": { + "message": "Esquerda", + "description": "Rótulo de esquerda para propriedades" + }, + "topLabel": { + "message": "Topo", + "description": "Rótulo de topo para propriedades" + }, + "sandboxEditorTrimInfo": { + "message": "Arraste as abas e use os botões à esquerda para editar a seção selecionada.", + "description": "Informações sobre corte na página do editor de testes" + }, + "sandboxEditorTrimButton": { + "message": "Cortar vídeo", + "description": "Botão de corte na página do editor de testes" + }, + "sandboxEditorTrimProgressButton": { + "message": "Cortando...", + "description": "Botão de corte na página do editor de testes durante o corte" + }, + "sandboxEditorCutButton": { + "message": "Cortar seção", + "description": "Botão de corte na página do editor de testes" + }, + "sandboxEditorCutProgressButton": { + "message": "Cortando...", + "description": "Botão de corte na página do editor de testes durante o corte" + }, + "sandboxEditorMuteButton": { + "message": "Mutar áudio", + "description": "Botão de mutar na página do editor de testes" + }, + "sandboxEditorMuteProgressButton": { + "message": "Mutando...", + "description": "Botão de mutar na página do editor de testes durante o muting" + }, + "learnMoreDot": { + "message": "Saiba mais.", + "description": "Saiba mais com um ponto" + }, + "undoLabel": { + "message": "Desfazer", + "description": "Rótulo de desfazer" + }, + "redoLabel": { + "message": "Refazer", + "description": "Rótulo de refazer" + }, + "leaveReview": { + "message": "Deixar uma avaliação", + "description": "Botão de deixar uma avaliação" + }, + "followForUpdates": { + "message": "Seguir para atualizações", + "description": "Botão de seguir para atualizações" + }, + "offlineLabelTitle": { + "message": "Atualmente offline", + "description": "Rótulo de offline" + }, + "offlineLabelDescription": { + "message": "Algumas funcionalidades estão indisponíveis até que você se reconecte", + "description": "Descrição do rótulo de offline" + }, + "offlineLabelTryAgain": { + "message": "Tentar novamente", + "description": "Botão de tentar novamente do rótulo de offline" + }, + "updateChromeLabelTitle": { + "message": "O Chrome precisa ser atualizado", + "description": "Rótulo de atualizar o Chrome" + }, + "updateChromeLabelDescription": { + "message": "Atualize para acessar mais funcionalidades", + "description": "Descrição do rótulo de atualizar o Chrome" + }, + "learnMoreLabel": { + "message": "Saiba mais", + "description": "Botão de saiba mais" + }, + "overLimitLabelTitle": { + "message": "Vídeo muito longo para processar no seu dispositivo", + "description": "Etiqueta de limite de mais de 5 minutos no editor" + }, + "overLimitLabelDescription": { + "message": "Edição e exportação em formato MP4 não estão disponíveis", + "description": "Descrição de limite de mais de 5 minutos no editor" + }, + "videoProcessingLabelTitle": { + "message": "O vídeo está sendo processado...", + "description": "Rótulo de processamento de vídeo no editor" + }, + "videoProcessingLabelDescription": { + "message": "Faça upgrade para um editor mais rápido", + "description": "Descrição do processamento de vídeo no editor" + }, + "sandboxEditTitle": { + "message": "Editar", + "description": "Título de edição na página do editor de testes" + }, + "noConnectionLabel": { + "message": "Sem conexão", + "description": "Rótulo de sem conexão" + }, + "notAvailableLabel": { + "message": "Indisponível", + "description": "Rótulo de não disponível" + }, + "editButtonTitle": { + "message": "Editar vídeo", + "description": "Rótulo de botão de corte" + }, + "editButtonDescription": { + "message": "Remova, corte ou silencie o vídeo", + "description": "Rótulo de corte" + }, + "preparingLabel": { + "message": "Preparando o vídeo, por favor, aguarde...", + "description": "Rótulo de preparação" + }, + "cropButtonTitle": { + "message": "Cortar", + "description": "Rótulo de botão de corte" + }, + "cropButtonDescription": { + "message": "Corte e redimensione o vídeo", + "description": "Rótulo de corte" + }, + "addAudioButtonTitle": { + "message": "Adicionar áudio", + "description": "Rótulo de botão de adicionar áudio" + }, + "addAudioButtonDescription": { + "message": "Carregue seu próprio áudio para o vídeo", + "description": "Rótulo de adicionar áudio" + }, + "sandboxSaveTitle": { + "message": "Salvar", + "description": "Título de salvar na página do editor de testes" + }, + "signOutDriveLabel": { + "message": "Sair do Google Drive", + "description": "Rótulo de sair do Google Drive" + }, + "savingDriveLabel": { + "message": "Salvando...", + "description": "Rótulo de salvamento no Google Drive" + }, + "saveDriveButtonTitle": { + "message": "Salvar no Google Drive", + "description": "Botão de salvar no Google Drive" + }, + "saveDriveButtonDescription": { + "message": "Guarde a versão atual do vídeo", + "description": "Rótulo de salvar no Google Drive" + }, + "signInDriveLabel": { + "message": "Inicie a sessão e salve no Google Drive", + "description": "Rótulo de iniciar sessão no Google Drive" + }, + "sandboxExportTitle": { + "message": "Exportar", + "description": "Título de exportação na página do editor de testes" + }, + "downloadingLabel": { + "message": "Baixando...", + "description": "Rótulo de download" + }, + "downloadWEBMButtonTitle": { + "message": "Baixar como .webm", + "description": "Botão de baixar WEBM" + }, + "downloadWEBMButtonDescription": { + "message": "Exportar um vídeo .webm", + "description": "Rótulo de baixar WEBM" + }, + "downloadMP4ButtonTitle": { + "message": "Baixar como .mp4", + "description": "Botão de baixar MP4" + }, + "downloadMP4ButtonDescription": { + "message": "Exportar um vídeo .mp4 (recomendado)", + "description": "Rótulo de baixar MP4" + }, + "downloadGIFButtonTitle": { + "message": "Baixar como .gif", + "description": "Botão de baixar GIF" + }, + "downloadGIFButtonDescription": { + "message": "Exportar um GIF (máximo de 30 segundos)", + "description": "Rótulo de baixar GIF" + }, + "shareModalSandboxTitle": { + "message": "Compartilhe seus vídeos com um link", + "description": "Título do modal de compartilhamento na página do editor de testes" + }, + "shareModalSandboxDescription": { + "message": "Em breve! Deixe seu email para ser notificado quando estiver disponível.", + "description": "Descrição do modal de compartilhamento na página do editor de testes" + }, + "shareModalSandboxButton": { + "message": "Junte-se à lista de espera", + "description": "Espaço reservado para o email no modal de compartilhamento na página do editor de testes" + }, + "shareSandboxButton": { + "message": "Compartilhar vídeo", + "description": "Botão de compartilhamento na página do editor de testes" + }, + "replaceAudioEditor": { + "message": "Substituir áudio existente", + "description": "Botão de substituição de áudio no editor" + }, + "zoomToPointPopup": { + "message": "Zoom para o cursor", + "description": "Popup de zoom para o ponto" + }, + "stayInPagePopup": { + "message": "Permaneça na página durante a gravação", + "description": "Popup de permanência na página" + }, + "micReminderPopup": { + "message": "Mostrar aviso de microfone desligado", + "description": "Popup de lembrete de microfone" + }, + "helpPopup": { + "message": "Ajuda", + "description": "Botão de popup de ajuda" + }, + "pausedRecordingToast": { + "message": "Gravação pausada. Pressione o botão de reprodução para continuar.", + "description": "Título do modal de gravação pausada" + }, + "chromePermissionsModalTitle": { + "message": "O MyTechPassport não tem permissão para gravar a sua tela", + "description": "Título do modal de permissões" + }, + "chromePermissionsModalDescription": { + "message": "Para permitir a gravação de tela, você deve conceder permissões ao MyTechPassport.", + "description": "Descrição do modal de permissões" + }, + "chromePermissionsModalAction": { + "message": "Ativar gravação de tela", + "description": "Ação do modal de permissões" + }, + "chromePermissionsModalCancel": { + "message": "Cancelar", + "description": "Cancelar do modal de permissões" + }, + "micMutedModalTitle": { + "message": "Seu microfone está desligado", + "description": "Título do modal de microfone desligado" + }, + "micMutedModalDescription": { + "message": "Para incluir áudio na sua gravação, você precisará ativar o seu microfone. Você deseja continuar sem áudio?", + "description": "Descrição do modal de microfone desligado" + }, + "micMutedModalAction": { + "message": "Sim, continuar", + "description": "Continuar do modal de microfone desligado" + }, + "micMutedModalCancel": { + "message": "Cancelar", + "description": "Cancelar do modal de microfone desligado" + }, + "setupTitle": { + "message": "Comece com o MyTechPassport em três passos simples:", + "description": "Título dos passos de configuração" + }, + "setupStep1Before": { + "message": "1- Clique no ícone de ", + "description": "Passo 1 de configuração, antes do ícone. Precisa de um espaço no final." + }, + "setupStep1After": { + "message": " extensões", + "description": "Passo 1 de configuração, depois do ícone. Precisa de um espaço no início." + }, + "setupStep2Before": { + "message": "2- Pressione o ícone de ", + "description": "Passo 2 de configuração, antes do ícone. Precisa de um espaço no final." + }, + "setupStep2After": { + "message": " alfinete", + "description": "Passo 2 de configuração, depois do ícone. Precisa de um espaço no início." + }, + "setupStep3Before": { + "message": "3- Clique no ícone de ", + "description": "Passo 3 de configuração, antes do ícone. Precisa de um espaço no final." + }, + "setupStep3After": { + "message": " MyTechPassport para começar", + "description": "Passo 3 de configuração, depois do ícone. Precisa de um espaço no início." + }, + "setupCompleteTitle": { + "message": "Fantástico! Vamos começar", + "description": "Título de configuração completa" + }, + "setupCompleteDescription": { + "message": "Agora você pode começar a gravar aqui ou em qualquer outra guia.", + "description": "Descrição de configuração completa" + }, + "clickHereDrawOnboarding": { + "message": "Clique aqui para desenhar", + "description": "Instruções para clicar aqui" + }, + "countdownMessage": { + "message": "Relaxe. Clique em qualquer lugar para parar a contagem regressiva.", + "description": "Mensagem de contagem regressiva" + }, + "sandboxEditorTooSmallInfo": { + "message": "A edição de vídeos com durações curtas pode ser imprecisa devido aos pequenos intervalos entre imagens.", + "description": "Informação sobre o editor ser muito pequeno" + }, + "processingBannerEditor": { + "message": "O vídeo está sendo processado, a reprodução pode ser imprecisa ou interrompida.", + "description": "Banner de processamento no editor" + }, + "croppingInfoTitle": { + "message": "Recortar o vídeo pode demorar algum tempo", + "description": "Título da informação de recorte" + }, + "croppingInfoDescription": { + "message": "Inscreva-se para editar vídeos mais rapidamente", + "description": "Descrição da informação de recorte" + }, + "micOnToast": { + "message": "Microfone ativado", + "description": "Título do aviso de microfone ativado" + }, + "micOffToast": { + "message": "Microfone desativado", + "description": "Título do aviso de microfone desativado" + }, + "hideUIAlerts": { + "message": "Ocultar notificações da interface", + "description": "Botão para ocultar alertas da interface" + }, + "noShowAgain": { + "message": "Não mostrar novamente", + "description": "Botão de não mostrar novamente" + }, + "toolbarHoverOnly": { + "message": "Ocultar os controles quando não estiverem em uso", + "description": "Botão para mostrar a barra de ferramentas apenas ao passar o cursor" + }, + "stopRecording": { + "message": "Parar gravação", + "description": "Botão de parar a gravação na tela de gravação" + }, + "updateAnnouncementTitle": { + "message": "Bem-vindo ao novo MyTechPassport!", + "description": "Título do anúncio de atualização para usuários existentes" + }, + "updateAnnouncementDescription": { + "message": "Atualizamos o design e desenvolvemos novas funcionalidades, mas não se preocupe, continua sendo a mesma extensão gratuita, privada e de código aberto.", + "description": "Descrição do anúncio de atualização para usuários existentes" + }, + "updateAnnouncementLearnMore": { + "message": "Saiba mais sobre a atualização.", + "description": "Link 'Saiba mais' do anúncio de atualização para usuários existentes" + }, + "updateAnnouncementButton": { + "message": "Começar", + "description": "Botão do anúncio de atualização para usuários existentes" + }, + "streamErrorModalTitle": { + "message": "Erro ao iniciar a gravação", + "description": "Título do modal de erro de transmissão" + }, + "streamErrorModalDescription": { + "message": "Houve um erro ao iniciar a gravação. Reinicie o seu navegador e tente novamente. Se o problema persistir, entre em contato conosco em support@MyTechPassport.io.", + "description": "Descrição do modal de erro de transmissão" + }, + "highestQuality": { + "message": "Melhor qualidade", + "description": "Rótulo para alternar para a melhor qualidade no popup" + }, + "restoreRecording": { + "message": "Restaurar a última gravação", + "description": "Botão para restaurar a última gravação no popup" + }, + "havingIssuesButton": { + "message": "Enfrentando problemas?", + "description": "Botão de problemas no editor" + }, + "havingIssuesModalTitle": { + "message": "Não consegue ver sua gravação?", + "description": "Título do modal de problemas no editor" + }, + "havingIssuesModalDescription": { + "message": "Se você concluiu sua gravação e está nesta página sem ver seu vídeo, você pode tentar baixar os dados brutos do vídeo, se estiverem disponíveis. Você também pode entrar em contato e enviar um relatório de erro.", + "description": "Descrição do modal de problemas no editor" + }, + "havingIssuesModalButton": { + "message": "Baixar dados brutos do vídeo", + "description": "Botão do modal de problemas no editor" + }, + "havingIssuesModalButton2": { + "message": "Reportar erro", + "description": "Segundo botão do modal de problemas no editor" + }, + "noRecordingFound": { + "message": "Nenhuma gravação encontrada, desculpe :(", + "description": "Alerta de nenhuma gravação encontrada no editor" + }, + "memoryLimitTitle": { + "message": "Limite de memória atingido", + "description": "Título de limite de memória atingido" + }, + "memoryLimitDescription": { + "message": "Seu dispositivo ficou sem memória para gravar, e a gravação foi interrompida automaticamente. Se desejar gravar por mais tempo, pode tentar reduzir a qualidade do vídeo ou liberar espaço no dispositivo.", + "description": "Descrição de limite de memória atingido" + }, + "understoodButton": { + "message": "Entendi", + "description": "Botão de entendi" + }, + "notEnoughSpaceTitle": { + "message": "Espaço insuficiente", + "description": "Título de espaço insuficiente" + }, + "notEnoughSpaceDescription": { + "message": "O MyTechPassport precisa de pelo menos 1 GB de espaço livre para gravar. Por favor, libere espaço e tente novamente.", + "description": "Descrição de espaço insuficiente" + }, + "clearSpaceButton": { + "message": "Apagar gravações anteriores", + "description": "Botão de apagar gravações anteriores" + }, + "sandboxAdvancedTitle": { + "message": "Avançado", + "description": "Seção avançada na página do editor no ambiente seguro" + }, + "rawRecordingButtonTitle": { + "message": "Baixar arquivo de vídeo bruto", + "description": "Botão de download de gravação bruta" + }, + "rawRecordingButtonDescription": { + "message": "Exportar os dados originais da gravação", + "description": "Rótulo do botão de download de gravação bruta" + }, + "troubleshootButtonTitle": { + "message": "Obter ajuda com sua gravação", + "description": "Botão de solução de problemas" + }, + "troubleShootButtonDescription": { + "message": "Recupere seu vídeo e resolva outros problemas", + "description": "Rótulo de solução de problemas" + }, + "rawRecordingModalTitle": { + "message": "Baixar arquivo de vídeo bruto", + "description": "Título do modal de gravação bruta" + }, + "rawRecordingModalDescription": { + "message": "O arquivo de vídeo bruto é o arquivo original gravado pelo MyTechPassport. Este vídeo não foi processado ou editado, portanto, pode ser muito grande e pode não ser reproduzido em todos os dispositivos. Se você estiver enfrentando problemas com o vídeo processado, pode usar este arquivo para recuperar seu vídeo.", + "description": "Descrição do modal de gravação bruta" + }, + "rawRecordingModalButton": { + "message": "Baixar", + "description": "Botão do modal de gravação bruta" + }, + "troubleshootModalTitle": { + "message": "Baixar informações do sistema e dados de vídeo para solucionar problemas", + "description": "Título do modal de solução de problemas" + }, + "troubleshootModalDescription": { + "message": "Após o download, envie o arquivo para support@MyTechPassport.io com todas as informações relevantes. Usaremos esses dados para ajudá-lo a solucionar quaisquer problemas que você tenha com a extensão e, se possível, recuperar seu vídeo.", + "description": "Descrição do modal de solução de problemas" + }, + "troubleshootModalButton": { + "message": "Baixar", + "description": "Botão do modal de solução de problemas" + }, + "overLimitModalTitle": { + "message": "O vídeo é muito longo para ser processado no seu dispositivo", + "description": "Título do modal de limite superior a 5 minutos" + }, + "overLimitModalDescription": { + "message": "Uma vez que o MyTechPassport é completamente privado e é executado localmente, está limitado pelo hardware do seu dispositivo. O processamento de um vídeo dessa duração levaria muito tempo e seria muito intensivo em recursos. Não se preocupe, você ainda pode baixar o arquivo WEBM ou a gravação bruta, mas a edição e a exportação para MP4 não estão disponíveis. Dito isso, você ainda pode tentar processar o vídeo, mesmo sabendo dos riscos.", + "description": "Descrição do modal de limite superior a 5 minutos" + }, + "overLimitModalButton": { + "message": "Entendo o risco, tentar mesmo assim", + "description": "Botão do modal de limite superior a 5 minutos" + }, + "overLimitModalLearnMore": { + "message": "Saiba mais sobre o processamento de vídeos longos.", + "description": "Link 'Saiba mais' do modal de limite superior a 5 minutos com um ponto" + }, + "recoveryModeTitle": { + "message": "Modo de recuperação", + "description": "Título do modo de recuperação" + }, + "downloadForTroubleshootingOption": { + "message": "Baixar dados para solucionar problemas", + "description": "Opção de download para solucionar problemas" + }, + "getHelpNav": { + "message": "Central de Ajuda", + "description": "Item de Navegação para Obter Ajuda" + }, + "audioWarningTitle": { + "message": "Gravar Áudio do Computador", + "description": "Título do Aviso de Áudio" + }, + "audioWarningDescription": { + "message": "Para gravar áudio desta página, você precisa alternar para '$tab$'.", + "description": "Descrição do Aviso de Áudio", + "placeholders": { + "tab": { + "content": "$1", + "example": "Área da Guia" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Extensão não suportada na guia", + "description": "Título de Extensão não Suportada na Guia" + }, + "extensionNotSupportedDescription": { + "message": "O MyTechPassport não foi suportado na sua guia anterior. Ainda é possível iniciar a sua gravação aqui e alternar para a guia, mas a sua câmera e barra de ferramentas não serão visíveis.", + "description": "Descrição de Extensão não Suportada na Guia" + }, + "backupsTitle": { + "message": "Configurar um Backup Local para as suas Gravações no MyTechPassportsport", + "description": "Título de Backups" + }, + "backupsDescription1": { + "message": "Mantenha uma cópia de todas as gravações que você fizer. Se você não configurar backups, suas gravações só serão salvas quando você escolher baixá-las.", + "description": "Descrição de Backups" + }, + "backupsDescription2": { + "message": "Você pode precisar criar uma nova pasta primeiro se estiver tentando salvar em 'Downloads' ou outras pastas do sistema.", + "description": "Descrição de Backups" + }, + "backupsSelectFolder": { + "message": "Selecionar uma Pasta", + "description": "Botão Selecionar Pasta" + }, + "backupsNotNow": { + "message": "Agora Não", + "description": "Botão Agora Não" + }, + "backupsOnTitle": { + "message": "Suas Gravações estão sendo salvas localmente", + "description": "Título de Backups Ativados" + }, + "backupsOnDescription": { + "message": "Para evitar solicitar permissões toda vez que você gravar, recomendamos deixar esta guia aberta.", + "description": "Descrição de Backups Ativados" + }, + "backupsClose": { + "message": "Fechar guia mesmo assim", + "description": "Botão Fechar guia mesmo assim" + }, + "backupsStop": { + "message": "Parar todos os backups de gravações", + "description": "Botão Parar Backups" + }, + "backupsConfirmTitle": { + "message": "Por favor, confirme novamente o acesso à sua pasta local de backup do MyTechPassport", + "description": "Título de Confirmação de Backups" + }, + "backupsConfirmDescription": { + "message": "Lamentamos, mas precisamos da sua permissão mais uma vez para continuar fazendo backups locais das suas gravações. Infelizmente, teremos que perguntar toda vez que você fechar esta guia, o que pode acontecer se você fechar o navegador ou reiniciar o computador.", + "description": "Descrição de Confirmação de Backups" + }, + "backupsConfirmAllow": { + "message": "Permitir que o MyTechPassport continue fazendo backups das gravações", + "description": "Botão Permitir na Confirmação de Backups" + }, + "backupsToggle": { + "message": "Ativar Backups das Gravações", + "description": "Rótulo de Alternar Backups" + }, + "backupPermissionFailTitle": { + "message": "Permissão não concedida para fazer backup da gravação", + "description": "Título de Falha de Permissão de Backup" + }, + "backupPermissionFailDescription": { + "message": "Você não selecionou uma pasta para fazer backup local das suas gravações. Dependendo da versão do seu navegador ou sistema operacional, você pode ser solicitado a selecionar a pasta toda vez que iniciar uma gravação. Você pode tentar novamente ou desativar completamente os backups se preferir não conceder permissões repetidamente.", + "description": "Descrição de Falha de Permissão de Backup" + }, + "recordAudioWarningMacTitle": { + "message": "Gravar Áudio do Computador", + "description": "Título de Aviso de Áudio para macOS" + }, + "recordAudioWarningMacDescription": { + "message": "No macOS, você só pode gravar o áudio da guia. Selecione a opção 'Guia do Chrome' e certifique-se de que 'Também compartilhar áudio da guia' está ativado.", + "description": "Descrição de Aviso de Áudio para macOS" + }, + "recordAudioWarningOtherTitle": { + "message": "Gravar Áudio do Computador", + "description": "Título de Aviso de Áudio para Outros Sistemas" + }, + "recordAudioWarningOtherDescription": { + "message": "Certifique-se de ativar a opção 'Compartilhar áudio do sistema' se desejar gravar áudio do computador. Se você não vir essa opção, tente atualizar o Chrome ou alternar para a gravação da guia.", + "description": "Descrição de Aviso de Áudio para Outros Sistemas" + }, + + "maxResolutionLabel": { + "message": "Resolução máxima", + "description": "Etiqueta de resolução máxima no menu de configurações" + }, + "maxFPSLabel": { + "message": "Taxa de quadros máxima", + "description": "Etiqueta de taxa de quadros máxima no menu de configurações" + }, + "notEnoughRAM": { + "message": "Memória RAM insuficiente", + "description": "Etiqueta 'Memória RAM insuficiente' no menu de configurações" + }, + "resizeWindowLabel": { + "message": "Redimensionar janela", + "description": "Rótulo de redimensionamento de janela no menu de configurações" + }, + "screenTooSmallTooltip": { + "message": "A tela é muito pequena para essa resolução", + "description": "Dica de tela muito pequena no menu de configurações" + }, + "maxResolutionTooltip": { + "message": "Não é possível gravar nessa resolução neste dispositivo", + "description": "Dica de resolução máxima no menu de configurações" + }, + "permissionsModalReview": { + "message": "Revisar permissões", + "description": "Botão de revisão de permissões" + } +} diff --git a/build/_locales/pt_PT/messages.json b/build/_locales/pt_PT/messages.json new file mode 100644 index 0000000..441e05f --- /dev/null +++ b/build/_locales/pt_PT/messages.json @@ -0,0 +1,1040 @@ +{ + "extName": { + "message": "MyTechPassport - Grave o ecrã e faça anotações", + "description": "Nome da extensão" + }, + "extDesc": { + "message": "O melhor gravador de ecrã para o Chrome sem limites. Captura, desenha, amplia, desfoca, edita vídeos e muito mais, sem necessidade de registo, totalmente privado e gratuito.", + "description": "Descrição da extensão" + }, + "recordTab": { + "message": "Gravar", + "description": "Etiqueta da página de gravação no popup" + }, + "videosTab": { + "message": "Os teus vídeos", + "description": "Etiqueta da página de vídeos no popup" + }, + "screenType": { + "message": "Ecrã", + "description": "Etiqueta de tipo de gravação de ecrã no popup" + }, + "tabType": { + "message": "Área", + "description": "Etiqueta de tipo de gravação de área de página no popup" + }, + "cameraType": { + "message": "Câmara", + "description": "Etiqueta de tipo de gravação de câmara no popup" + }, + "mockupType": { + "message": "Mockup", + "description": "Etiqueta de tipo de gravação de mockup no popup" + }, + "customAreaRecordingDisabledTitle": { + "message": "Gravação de área personalizada desativada", + "description": "Aviso de gravação de área personalizada desativada para versões do Chrome anteriores à 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Atualiza a versão do Chrome para 110+", + "description": "Descrição do aviso de gravação de área personalizada desativada para versões do Chrome anteriores à 104" + }, + "customAreaRecordingDisabledAction": { + "message": "Atualizar", + "description": "Ação do aviso de gravação de área personalizada desativada para versões do Chrome anteriores à 104" + }, + "permissionsModalTitle": { + "message": "Verifica as tuas permissões", + "description": "Título do modal de aviso de permissões de câmara/microfone" + }, + "permissionsModalDescription": { + "message": "Parece que o MyTechPassport não consegue aceder à tua câmara ou microfone. Certifica-te de permitir o acesso ao clicar no ícone da câmara na barra de endereço.", + "description": "Descrição do modal de aviso de permissões de câmara/microfone" + }, + "permissionsModalDismiss": { + "message": "Ignorar", + "description": "Botão de ignorar no modal de aviso de permissões de câmara/microfone" + }, + "allowCameraAccessButton": { + "message": "Permitir acesso à câmara", + "description": "Botão de permitir acesso à câmara" + }, + "allowMicrophoneAccessButton": { + "message": "Permitir acesso ao microfone", + "description": "Botão de permitir acesso ao microfone" + }, + "pushToTalkLabel": { + "message": "Premir para falar", + "description": "Etiqueta do interruptor premir para falar" + }, + "customAreaLabel": { + "message": "Definir uma área para gravar", + "description": "Etiqueta do interruptor de área personalizada" + }, + "flipCameraLabel": { + "message": "Inverter câmara", + "description": "Etiqueta do interruptor de inverter câmara" + }, + "backgroundEffectsLabel": { + "message": "Efeitos de fundo", + "description": "Etiqueta do interruptor de efeitos de fundo" + }, + "recordButtonLabel": { + "message": "Iniciar gravação", + "description": "Etiqueta do botão de gravar" + }, + "recordButtonNoCameraLabel": { + "message": "Defina uma câmara para gravar", + "description": "Rótulo do botão de gravação quando no modo de câmera e nenhuma câmera está selecionada" + }, + "recordButtonInProgressLabel": { + "message": "A iniciar gravação...", + "description": "Etiqueta em progresso do botão de gravar" + }, + "showMoreOptionsLabel": { + "message": "Mostrar mais opções", + "description": "Etiqueta de mostrar mais opções" + }, + + "systemAudioLabel": { + "message": "Incluir áudio do sistema", + "description": "Etiqueta de áudio do sistema/guia" + }, + "hideToolbarLabel": { + "message": "Ocultar barra de ferramentas", + "description": "Etiqueta de ocultar barra de ferramentas" + }, + "countdownLabel": { + "message": "Contagem decrescente", + "description": "Etiqueta de contagem decrescente" + }, + "alarmLabel": { + "message": "Definir um limite de tempo", + "description": "Etiqueta de alarme" + }, + "blurTypeLabel": { + "message": "Blur", + "description": "Etiqueta de desfocar fundo" + }, + "noneDropdownLabel": { + "message": "Nenhum", + "description": "Nenhum dispositivo selecionado" + }, + "noCameraDropdownLabel": { + "message": "Sem câmara", + "description": "Nenhuma câmara selecionada" + }, + "noMicrophoneDropdownLabel": { + "message": "Sem microfone", + "description": "Nenhum microfone selecionado" + }, + "selectSourceDropdownPlaceholder": { + "message": "Selecionar uma fonte", + "description": "Marcador de posição para selecionar fonte" + }, + "offLabel": { + "message": "Desligado", + "description": "Etiqueta de desligado no menu suspenso" + }, + "regionWidthLabel": { + "message": "Largura", + "description": "Etiqueta de largura de região" + }, + "regionHeightLabel": { + "message": "Altura", + "description": "Etiqueta de altura de região" + }, + "addImageToastTitle": { + "message": "Clica para colocar a imagem", + "description": "Brinde que aparece ao adicionar uma nova imagem" + }, + "finishRecordingTooltip": { + "message": "Terminar gravação", + "description": "Dica de terminar gravação" + }, + "restartRecordingTooltip": { + "message": "Reiniciar gravação", + "description": "Dica de reiniciar gravação" + }, + "pauseRecordingTooltip": { + "message": "Pausar gravação", + "description": "Dica de pausar gravação" + }, + "resumeRecordingTooltip": { + "message": "Continuar gravação", + "description": "Dica de continuar gravação" + }, + "cancelRecordingTooltip": { + "message": "Cancelar gravação", + "description": "Dica de cancelar gravação" + }, + "toggleDrawingToolsTooltip": { + "message": "Ferramentas de desenho", + "description": "Dica de alternar ferramentas de desenho" + }, + "toggleBlurToolTooltip": { + "message": "Ferramenta de desfoque", + "description": "Dica de alternar ferramentas de desfoque" + }, + "toggleCursorOptionsTooltip": { + "message": "Opções de cursor", + "description": "Dica de alternar opções de cursor" + }, + "disableCameraTooltip": { + "message": "Desativar câmara", + "description": "Dica de desativar câmara" + }, + "enableCameraTooltip": { + "message": "Ativar câmara", + "description": "Dica de ativar câmara" + }, + "noCameraPermissionsTooltip": { + "message": "Sem permissões de câmara", + "description": "Dica de sem permissões de câmara" + }, + "disableMicrophoneTooltip": { + "message": "Desativar microfone", + "description": "Dica de desativar microfone" + }, + "enableMicrophoneTooltip": { + "message": "Ativar microfone", + "description": "Dica de ativar microfone" + }, + "noMicrophonePermissionsTooltip": { + "message": "Sem permissões de microfone", + "description": "Dica de sem permissões de microfone" + }, + "selectToolTooltip": { + "message": "Selecionar ferramenta", + "description": "Dica de selecionar ferramenta" + }, + "penToolTooltip": { + "message": "Ferramenta de caneta", + "description": "Dica de ferramenta de caneta" + }, + "highlighterToolTooltip": { + "message": "Ferramenta de marcador", + "description": "Dica de ferramenta de marcador" + }, + "eraserToolTooltip": { + "message": "Ferramenta de borracha", + "description": "Dica de ferramenta de borracha" + }, + "textToolTooltip": { + "message": "Ferramenta de texto", + "description": "Dica de ferramenta de texto" + }, + "shapeToolTooltip": { + "message": "Ferramenta de formas", + "description": "Dica de ferramenta de formas" + }, + "arrowToolTooltip": { + "message": "Ferramenta de seta", + "description": "Dica de ferramenta de seta" + }, + "imageToolTooltip": { + "message": "Ferramenta de imagem", + "description": "Dica de ferramenta de imagem" + }, + "undoTooltip": { + "message": "Desfazer", + "description": "Dica de desfazer" + }, + "redoTooltip": { + "message": "Refazer", + "description": "Dica de refazer" + }, + "clearCanvasTooltip": { + "message": "Limpar tela", + "description": "Dica de limpar tela" + }, + "moreColorsTooltip": { + "message": "Mais cores", + "description": "Dica de mais cores" + }, + "thickStrokeTooltip": { + "message": "Traço grosso", + "description": "Dica de traço grosso" + }, + "mediumStrokeTooltip": { + "message": "Traço médio", + "description": "Dica de traço médio" + }, + "thinStrokeTooltip": { + "message": "Traço fino", + "description": "Dica de traço fino" + }, + "togglePictureinPictureModeTooltip": { + "message": "Alternar modo de Picture-in-Picture (PIP)", + "description": "Dica de alternar modo de imagem sobre imagem" + }, + "toggleFillTooltip": { + "message": "Alternar preenchimento", + "description": "Dica de alternar preenchimento" + }, + "drawingModeToast": { + "message": "Modo de desenho", + "description": "Brinde de modo de desenho" + }, + "blurModeToast": { + "message": "Modo de desfoque", + "description": "Brinde de modo de desfoque" + }, + "clearBlurredElementsTooltip": { + "message": "Limpar todos os elementos desfocados", + "description": "Dica de limpar todos os elementos desfocados" + }, + "highlightClicksTooltip": { + "message": "Destacar cliques", + "description": "Dica de destacar cliques" + }, + "highlightCursorTooltip": { + "message": "Destacar cursor", + "description": "Dica de destacar cursor" + }, + "spotlightCursorTooltip": { + "message": "Foco no cursor", + "description": "Dica de foco no cursor" + }, + "permissionsModalNoShowAgain": { + "message": "Não mostrar novamente", + "description": "Botão de fechar modal de permissões" + }, + "restartModalTitle": { + "message": "Tens a certeza que queres reiniciar a gravação?", + "description": "Título do modal de reiniciar gravação" + }, + "restartModalDescription": { + "message": "O teu progresso no vídeo será perdido.", + "description": "Descrição do modal de reiniciar gravação" + }, + "restartModalRestart": { + "message": "Reiniciar gravação", + "description": "Botão de reiniciar gravação no modal" + }, + "restartModalResume": { + "message": "Continuar gravação", + "description": "Botão de continuar gravação no modal" + }, + "discardModalTitle": { + "message": "Tens a certeza que queres descartar a gravação?", + "description": "Título do modal de descartar gravação" + }, + "discardModalDescription": { + "message": "O teu progresso no vídeo será perdido.", + "description": "Descrição do modal de descartar gravação" + }, + "discardModalDiscard": { + "message": "Descartar gravação", + "description": "Botão de descartar gravação no modal" + }, + "discardModalResume": { + "message": "Continuar gravação", + "description": "Botão de continuar gravação no modal" + }, + "recorderSelectTitle": { + "message": "Escolhe o que queres gravar", + "description": "Título na página de gravação" + }, + "recorderSelectProgressTitle": { + "message": "Gravando...", + "description": "Título na página de gravação durante a gravação" + }, + "recorderSelectDescription": { + "message": "Mantém este separador aberto. Será fechado assim que a tua gravação for guardada.", + "description": "Descrição na página de gravação" + }, + "sandboxProgressTitle": { + "message": "Preparando a gravação...", + "description": "Título na página de testes durante a gravação/salvamento" + }, + "sandboxProgressDescription": { + "message": "Mantém este separador aberto. Será atualizado com a tua gravação quando estiver pronta.", + "description": "Descrição na página de testes durante a gravação/salvamento" + }, + "sandboxEditorMainTitle": { + "message": "Editor", + "description": "Título na navegação da página do editor de testes" + }, + "sandboxEditorCancelButton": { + "message": "Cancelar", + "description": "Botão de cancelar na página do editor de testes" + }, + "sandboxEditorRevertButton": { + "message": "Reverter para o original", + "description": "Botão de reverter na página do editor de testes" + }, + "sandboxEditorResetButton": { + "message": "Redefinir", + "description": "Botão de redefinir na página do editor de testes" + }, + "sandboxEditorSaveButton": { + "message": "Guardar alterações", + "description": "Botão de salvar na página do editor de testes" + }, + "sandboxEditorSaveProgressButton": { + "message": "Guardando...", + "description": "Botão de salvar na página do editor de testes durante o salvamento" + }, + "sandboxAudioDragAndDrop": { + "message": "Arrasta o teu ficheiro de áudio", + "description": "Arraste e solte arquivo de áudio na página do editor de testes" + }, + "sandboxAudioOrBrowse": { + "message": "Ou clica para procurar", + "description": "Ou clique para procurar arquivo de áudio na página do editor de testes" + }, + "sandboxAudioSettingsTitle": { + "message": "Configurações", + "description": "Título de configurações de áudio na página do editor de testes" + }, + "sandboxAudioVolumeLabel": { + "message": "Volume", + "description": "Rótulo de volume de áudio na página do editor de testes" + }, + "sandboxAudioUpdateButton": { + "message": "Aplicar", + "description": "Botão de atualizar áudio na página do editor de testes" + }, + "sandboxCropTitle": { + "message": "Recortar", + "description": "Título de recorte na página do editor de testes" + }, + "widthLabel": { + "message": "Largura", + "description": "Rótulo de largura para propriedades" + }, + "heightLabel": { + "message": "Altura", + "description": "Rótulo de altura para propriedades" + }, + "leftLabel": { + "message": "Esquerda", + "description": "Rótulo de esquerda para propriedades" + }, + "topLabel": { + "message": "Topo", + "description": "Rótulo de topo para propriedades" + }, + "sandboxEditorTrimInfo": { + "message": "Arrasta as abas e usa os botões à esquerda para editar a secção selecionada.", + "description": "Informações sobre recorte na página do editor de testes" + }, + "sandboxEditorTrimButton": { + "message": "Recortar vídeo", + "description": "Botão de recortar na página do editor de testes" + }, + "sandboxEditorTrimProgressButton": { + "message": "Recortando...", + "description": "Botão de recortar na página do editor de testes durante o recorte" + }, + "sandboxEditorCutButton": { + "message": "Cortar secção", + "description": "Botão de cortar na página do editor de testes" + }, + "sandboxEditorCutProgressButton": { + "message": "Cortando...", + "description": "Botão de cortar na página do editor de testes durante o corte" + }, + "sandboxEditorMuteButton": { + "message": "Silenciar áudio", + "description": "Botão de silenciar na página do editor de testes" + }, + "sandboxEditorMuteProgressButton": { + "message": "Silenciando...", + "description": "Botão de silenciar na página do editor de testes durante o silenciamento" + }, + "learnMoreDot": { + "message": "Sabe mais.", + "description": "Saiba mais com um ponto" + }, + "undoLabel": { + "message": "Desfazer", + "description": "Rótulo de desfazer" + }, + "redoLabel": { + "message": "Refazer", + "description": "Rótulo de refazer" + }, + "leaveReview": { + "message": "Deixa uma avaliação", + "description": "Botão de deixar uma avaliação" + }, + "followForUpdates": { + "message": "Seguir para atualizações", + "description": "Botão de seguir para atualizações" + }, + "offlineLabelTitle": { + "message": "Atualmente offline", + "description": "Rótulo de offline" + }, + "offlineLabelDescription": { + "message": "Algumas funcionalidades estão indisponíveis até te reconectares", + "description": "Descrição do rótulo de offline" + }, + "offlineLabelTryAgain": { + "message": "Tentar novamente", + "description": "Botão de tentar novamente do rótulo de offline" + }, + "updateChromeLabelTitle": { + "message": "O Chrome precisa de ser atualizado", + "description": "Rótulo de atualizar o Chrome" + }, + "updateChromeLabelDescription": { + "message": "Atualiza para aceder a mais funcionalidades", + "description": "Descrição do rótulo de atualizar o Chrome" + }, + "learnMoreLabel": { + "message": "Sabe mais", + "description": "Botão de saiba mais" + }, + "overLimitLabelTitle": { + "message": "Vídeo demasiado longo para processar no teu dispositivo", + "description": "Etiqueta de limite superior a 5 minutos no editor" + }, + "overLimitLabelDescription": { + "message": "Edição e exportação em formato MP4 não estão disponíveis", + "description": "Descrição de limite superior a 5 minutos no editor" + }, + "videoProcessingLabelTitle": { + "message": "O vídeo está a ser processado...", + "description": "Rótulo de processamento de vídeo no editor" + }, + "videoProcessingLabelDescription": { + "message": "Faz upgrade para um editor mais rápido", + "description": "Descrição do processamento de vídeo no editor" + }, + "sandboxEditTitle": { + "message": "Editar", + "description": "Título de edição na página do editor de testes" + }, + "noConnectionLabel": { + "message": "Sem conexão", + "description": "Rótulo de sem conexão" + }, + "notAvailableLabel": { + "message": "Indisponível", + "description": "Rótulo de não disponível" + }, + "editButtonTitle": { + "message": "Editar vídeo", + "description": "Rótulo de botão de recorte" + }, + "editButtonDescription": { + "message": "Remove, corta ou silencia o vídeo", + "description": "Rótulo de recorte" + }, + "preparingLabel": { + "message": "Preparando o vídeo, por favor aguarda...", + "description": "Rótulo de preparação" + }, + "cropButtonTitle": { + "message": "Recortar", + "description": "Rótulo de botão de recorte" + }, + "cropButtonDescription": { + "message": "Recorta e redimensiona o vídeo", + "description": "Rótulo de recorte" + }, + "addAudioButtonTitle": { + "message": "Adicionar áudio", + "description": "Rótulo de botão de adicionar áudio" + }, + "addAudioButtonDescription": { + "message": "Carrega o teu próprio áudio para o vídeo", + "description": "Rótulo de adicionar áudio" + }, + "sandboxSaveTitle": { + "message": "Guardar", + "description": "Título de salvar na página do editor de testes" + }, + "signOutDriveLabel": { + "message": "Sair do Google Drive", + "description": "Rótulo de sair do Google Drive" + }, + "savingDriveLabel": { + "message": "Guardando...", + "description": "Rótulo de salvamento no Google Drive" + }, + "saveDriveButtonTitle": { + "message": "Guardar no Google Drive", + "description": "Botão de salvar no Google Drive" + }, + "saveDriveButtonDescription": { + "message": "Guarda a versão atual do vídeo", + "description": "Rótulo de salvar no Google Drive" + }, + "signInDriveLabel": { + "message": "Inicia a sessão e guarda no Google Drive", + "description": "Rótulo de iniciar sessão no Google Drive" + }, + "sandboxExportTitle": { + "message": "Exportar", + "description": "Título de exportação na página do editor de testes" + }, + "downloadingLabel": { + "message": "Descarregando...", + "description": "Rótulo de download" + }, + "downloadWEBMButtonTitle": { + "message": "Descarregar como .webm", + "description": "Botão de baixar WEBM" + }, + "downloadWEBMButtonDescription": { + "message": "Exportar um vídeo .webm", + "description": "Rótulo de baixar WEBM" + }, + "downloadMP4ButtonTitle": { + "message": "Descarregar como .mp4", + "description": "Botão de baixar MP4" + }, + "downloadMP4ButtonDescription": { + "message": "Exportar um vídeo .mp4 (recomendado)", + "description": "Rótulo de baixar MP4" + }, + "downloadGIFButtonTitle": { + "message": "Descarregar como .gif", + "description": "Botão de baixar GIF" + }, + "downloadGIFButtonDescription": { + "message": "Exportar um GIF (máximo de 30 segundos)", + "description": "Rótulo de baixar GIF" + }, + "shareModalSandboxTitle": { + "message": "Partilha os teus vídeos com um link", + "description": "Título do modal de partilha na página do editor de testes" + }, + "shareModalSandboxDescription": { + "message": "Em breve! Deixa o teu email para seres notificado quando estiver disponível.", + "description": "Descrição do modal de partilha na página do editor de testes" + }, + "shareModalSandboxButton": { + "message": "Junta-te à lista de espera", + "description": "Espaço reservado para o email no modal de partilha na página do editor de testes" + }, + "shareSandboxButton": { + "message": "Partilhar vídeo", + "description": "Botão de partilha na página do editor de testes" + }, + "replaceAudioEditor": { + "message": "Substituir áudio existente", + "description": "Botão de substituição de áudio no editor" + }, + "zoomToPointPopup": { + "message": "Zoom para o cursor", + "description": "Popup de zoom para o ponto" + }, + "stayInPagePopup": { + "message": "Permanece na página durante a gravação", + "description": "Popup de permanência na página" + }, + "micReminderPopup": { + "message": "Mostrar aviso de microfone desligado", + "description": "Popup de lembrete de microfone" + }, + "helpPopup": { + "message": "Ajuda", + "description": "Botão de popup de ajuda" + }, + "pausedRecordingToast": { + "message": "Gravação pausada. Pressiona o botão de reprodução para continuar.", + "description": "Título do modal de gravação pausada" + }, + "chromePermissionsModalTitle": { + "message": "O MyTechPassport não tem permissão para gravar o teu ecrã", + "description": "Título do modal de permissões" + }, + "chromePermissionsModalDescription": { + "message": "Para permitir a gravação de ecrã, deves dar permissões ao MyTechPassport.", + "description": "Descrição do modal de permissões" + }, + "chromePermissionsModalAction": { + "message": "Ativar gravação de ecrã", + "description": "Ação do modal de permissões" + }, + "chromePermissionsModalCancel": { + "message": "Cancelar", + "description": "Cancelar do modal de permissões" + }, + "micMutedModalTitle": { + "message": "O teu microfone está desligado", + "description": "Título do modal de microfone desligado" + }, + "micMutedModalDescription": { + "message": "Para incluir áudio na tua gravação, terás de ativar o teu microfone. Queres continuar sem áudio?", + "description": "Descrição do modal de microfone desligado" + }, + "micMutedModalAction": { + "message": "Sim, continuar", + "description": "Continuar do modal de microfone desligado" + }, + "micMutedModalCancel": { + "message": "Cancelar", + "description": "Cancelar do modal de microfone desligado" + }, + "setupTitle": { + "message": "Começa com o MyTechPassport em três passos simples:", + "description": "Título dos passos de configuração" + }, + "setupStep1Before": { + "message": "1- Clica no ícone de ", + "description": "Passo 1 de configuração, antes do ícone. Precisa de um espaço no final." + }, + "setupStep1After": { + "message": " extensões", + "description": "Passo 1 de configuração, depois do ícone. Precisa de um espaço no início." + }, + "setupStep2Before": { + "message": "2- Pressiona o ícone de ", + "description": "Passo 2 de configuração, antes do ícone. Precisa de um espaço no final." + }, + "setupStep2After": { + "message": " alfinete", + "description": "Passo 2 de configuração, depois do ícone. Precisa de um espaço no início." + }, + "setupStep3Before": { + "message": "3- Clica no ícone de ", + "description": "Passo 3 de configuração, antes do ícone. Precisa de um espaço no final." + }, + "setupStep3After": { + "message": " MyTechPassportsport para começar", + "description": "Passo 3 de configuração, depois do ícone. Precisa de um espaço no início." + }, + "setupCompleteTitle": { + "message": "Fantástico! Vamos começar", + "description": "Título de configuração completa" + }, + "setupCompleteDescription": { + "message": "Agora podes começar a gravar aqui ou em qualquer outro separdor.", + "description": "Descrição de configuração completa" + }, + "clickHereDrawOnboarding": { + "message": "Clica aqui para desenhar", + "description": "Instruções para clicar aqui" + }, + "countdownMessage": { + "message": "Relaxa. Clica em qualquer lugar para parar a contagem decrescente.", + "description": "Mensagem de contagem regressiva" + }, + + "sandboxEditorTooSmallInfo": { + "message": "A edição de vídeos com durações curtas pode ser imprecisa devido aos pequenos intervalos entre imagens.", + "description": "Informação sobre o editor ser demasiado pequeno" + }, + "processingBannerEditor": { + "message": "O vídeo está a ser processado, a reprodução pode ser imprecisa ou interrompida.", + "description": "Banner de processamento no editor" + }, + "croppingInfoTitle": { + "message": "Recortar o vídeo pode demorar algum tempo", + "description": "Título da informação de recorte" + }, + "croppingInfoDescription": { + "message": "Subscreva para editar vídeos mais rapidamente", + "description": "Descrição da informação de recorte" + }, + "micOnToast": { + "message": "Microfone ativado", + "description": "Título do aviso de microfone ativado" + }, + "micOffToast": { + "message": "Microfone desativado", + "description": "Título do aviso de microfone desativado" + }, + "hideUIAlerts": { + "message": "Ocultar notificações da interface", + "description": "Botão para ocultar alertas da interface" + }, + "noShowAgain": { + "message": "Não mostrar novamente", + "description": "Botão de não mostrar novamente" + }, + "toolbarHoverOnly": { + "message": "Ocultar os controles quando não estiverem em uso", + "description": "Botão para mostrar a barra de ferramentas apenas ao passar o cursor" + }, + "stopRecording": { + "message": "Parar gravação", + "description": "Stop recording button in recording screen" + }, + "updateAnnouncementTitle": { + "message": "Bem-vindo ao novo MyTechPassport!", + "description": "Título do anúncio de atualização para usuários existentes" + }, + "updateAnnouncementDescription": { + "message": "Atualizamos o design e desenvolvemos novas funcionalidades, mas não te preocupes, continua a ser a mesma extensão gratuita, privada e de código de acesso livre.", + "description": "Descrição do anúncio de atualização para utilizadores existentes" + }, + "updateAnnouncementLearnMore": { + "message": "Obtém mais informações sobre a atualização.", + "description": "Link 'Saber mais' do anúncio de atualização para usuários existentes" + }, + "updateAnnouncementButton": { + "message": "Começar", + "description": "Botão do anúncio de atualização para usuários existentes" + }, + "streamErrorModalTitle": { + "message": "Erro ao iniciar a gravação", + "description": "Título do modal de erro de transmissão" + }, + "streamErrorModalDescription": { + "message": "Houve um erro ao iniciar a gravação. Reinicia o teu navegador e tenta novamente. Se o problema persistir, por favor, entra em contato conosco em support@MyTechPassportsport.io.", + "description": "Descrição do modal de erro de transmissão" + }, + "highestQuality": { + "message": "Qualidade mais alta", + "description": "Rótulo de alternar a qualidade mais alta no popup" + }, + "restoreRecording": { + "message": "Restaurar a última gravação", + "description": "Botão para restaurar a última gravação no popup" + }, + "havingIssuesButton": { + "message": "A ter problemas?", + "description": "Botão de problemas no editor" + }, + "havingIssuesModalTitle": { + "message": "Não consegue ver a sua gravação?", + "description": "Título do modal de problemas no editor" + }, + "havingIssuesModalDescription": { + "message": "Se completou a sua gravação e se encontra nesta página sem conseguir ver o seu vídeo, pode tentar descarregar os dados brutos do vídeo, se estiverem disponíveis. Também pode entrar em contacto e enviar um relatório de erro.", + "description": "Descrição do modal de problemas no editor" + }, + "havingIssuesModalButton": { + "message": "Descarregar dados brutos do vídeo", + "description": "Botão do modal de problemas no editor" + }, + "havingIssuesModalButton2": { + "message": "Reportar erro", + "description": "Segundo botão do modal de problemas no editor" + }, + "noRecordingFound": { + "message": "Não foi encontrada nenhuma gravação, lamento :(", + "description": "Alerta de não foi encontrada nenhuma gravação no editor" + }, + "memoryLimitTitle": { + "message": "Limite de memória atingido", + "description": "Título de limite de memória atingido" + }, + "memoryLimitDescription": { + "message": "O seu dispositivo ficou sem memória para gravar, pelo que a gravação foi interrompida automaticamente. Se desejar gravar por mais tempo, pode tentar reduzir a qualidade do vídeo ou libertar espaço no dispositivo.", + "description": "Descrição de limite de memória atingido" + }, + "understoodButton": { + "message": "Entendi", + "description": "Botão de entendi" + }, + "notEnoughSpaceTitle": { + "message": "Espaço insuficiente", + "description": "Título de espaço insuficiente" + }, + "notEnoughSpaceDescription": { + "message": "O MyTechPassport precisa de pelo menos 1 GB de espaço livre para gravar. Por favor, liberte espaço e tente novamente.", + "description": "Descrição de espaço insuficiente" + }, + "clearSpaceButton": { + "message": "Apagar gravações anteriores", + "description": "Botão de apagar gravações anteriores" + }, + "sandboxAdvancedTitle": { + "message": "Avançado", + "description": "Secção avançada na página do editor no ambiente seguro" + }, + "rawRecordingButtonTitle": { + "message": "Transferir ficheiro de vídeo bruto", + "description": "Botão de transferência de gravação em bruto" + }, + "rawRecordingButtonDescription": { + "message": "Exportar os dados originais da gravação", + "description": "Etiqueta do botão de transferência de gravação em bruto" + }, + "troubleshootButtonTitle": { + "message": "Obter ajuda com a tua gravação", + "description": "Botão de resolução de problemas" + }, + "troubleShootButtonDescription": { + "message": "Recupera o teu vídeo e resolve outros problemas", + "description": "Etiqueta de resolução de problemas" + }, + "rawRecordingModalTitle": { + "message": "Transferir ficheiro de vídeo bruto", + "description": "Título do modal de gravação em bruto" + }, + "rawRecordingModalDescription": { + "message": "O ficheiro de vídeo bruto é o ficheiro original gravado pelo MyTechPassport. Este vídeo não foi processado nem editado, pelo que pode ser muito grande e pode não ser reproduzível em todos os dispositivos. Se estiveres a ter problemas com o vídeo processado, podes usar este ficheiro para recuperar o teu vídeo.", + "description": "Descrição do modal de gravação em bruto" + }, + "rawRecordingModalButton": { + "message": "Transferir", + "description": "Botão do modal de gravação em bruto" + }, + "troubleshootModalTitle": { + "message": "Transferir informação do sistema e dados de vídeo para resolução de problemas", + "description": "Título do modal de resolução de problemas" + }, + "troubleshootModalDescription": { + "message": "Após a transferência, envia o ficheiro para support@MyTechPassport.io com qualquer informação relevante. Utilizaremos estes dados para te ajudar a resolver quaisquer problemas que tenhas com a extensão e, se possível, recuperar o teu vídeo.", + "description": "Descrição do modal de resolução de problemas" + }, + "troubleshootModalButton": { + "message": "Transferir", + "description": "Botão do modal de resolução de problemas" + }, + "overLimitModalTitle": { + "message": "O vídeo é demasiado longo para ser processado no teu dispositivo", + "description": "Título do modal de limite superior a 5 minutos" + }, + "overLimitModalDescription": { + "message": "Uma vez que o MyTechPassportsport é completamente privado e funciona localmente, está limitado pelo hardware do teu dispositivo. Processar um vídeo com esta duração levaria demasiado tempo e seria muito intensivo em recursos. Não te preocupes, ainda podes descarregar o ficheiro WEBM ou a gravação em bruto, mas a edição e a exportação para MP4 não estão disponíveis. Dito isto, ainda podes tentar processar o vídeo mesmo assim, se compreenderes os riscos.", + "description": "Descrição do modal de limite superior a 5 minutos" + }, + "overLimitModalButton": { + "message": "Compreendo o risco, tentar mesmo assim", + "description": "Botão do modal de limite superior a 5 minutos" + }, + "overLimitModalLearnMore": { + "message": "Sabe mais sobre o processamento de vídeos longos.", + "description": "Link 'Sabe mais' do modal de limite superior a 5 minutos com um ponto" + }, + "recoveryModeTitle": { + "message": "Modo de recuperação", + "description": "Título do modo de recuperação" + }, + "downloadForTroubleshootingOption": { + "message": "Descarregar dados para solucionar problemas", + "description": "Opção de descarregamento para solucionar problemas" + }, + "getHelpNav": { + "message": "Centro de Ajuda", + "description": "Item de Navegação para Obter Ajuda" + }, + "audioWarningTitle": { + "message": "Gravar Áudio do Computador", + "description": "Título do Aviso de Áudio" + }, + "audioWarningDescription": { + "message": "Para gravar áudio desta página, precisa alternar para '$tab$'.", + "description": "Descrição do Aviso de Áudio", + "placeholders": { + "tab": { + "content": "$1", + "example": "Área da Guia" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Extensão não suportada na guia", + "description": "Título de Extensão não Suportada na Guia" + }, + "extensionNotSupportedDescription": { + "message": "O MyTechPassport não foi suportado na sua guia anterior. Ainda pode iniciar a sua gravação aqui e alternar para a guia, mas a sua câmara e barra de ferramentas não serão visíveis.", + "description": "Descrição de Extensão não Suportada na Guia" + }, + "backupsTitle": { + "message": "Configurar uma Cópia de Segurança Local para as suas Gravações no MyTechPassport", + "description": "Título de Cópias de Segurança" + }, + "backupsDescription1": { + "message": "Mantenha uma cópia de todas as gravações que efetuar. Se não configurar cópias de segurança, as suas gravações só serão guardadas quando optar por as descarregar.", + "description": "Descrição de Cópias de Segurança" + }, + "backupsDescription2": { + "message": "Poderá ser necessário criar uma nova pasta primeiro se estiver a tentar guardar em 'Transferências' ou outras pastas do sistema.", + "description": "Descrição de Cópias de Segurança" + }, + "backupsSelectFolder": { + "message": "Selecionar uma Pasta", + "description": "Botão Selecionar Pasta" + }, + "backupsNotNow": { + "message": "Agora Não", + "description": "Botão Agora Não" + }, + "backupsOnTitle": { + "message": "As Suas Gravações Estão a Ser Guardadas Localmente", + "description": "Título de Cópias de Segurança Ativas" + }, + "backupsOnDescription": { + "message": "Para evitar pedir permissões sempre que efetuar gravações, recomendamos que deixe esta guia aberta.", + "description": "Descrição de Cópias de Segurança Ativas" + }, + "backupsClose": { + "message": "Fechar Guia de Qualquer Maneira", + "description": "Botão Fechar Guia de Qualquer Maneira" + }, + "backupsStop": { + "message": "Parar Todas as Cópias de Segurança de Gravações", + "description": "Botão Parar Cópias de Segurança" + }, + "backupsConfirmTitle": { + "message": "Por Favor, Reconfirme o Acesso à Sua Pasta Local de Cópias de Segurança do MyTechPassport", + "description": "Título de Confirmação de Cópias de Segurança" + }, + "backupsConfirmDescription": { + "message": "Lamentamos, mas precisamos da sua permissão mais uma vez para continuar a efetuar cópias locais das suas gravações. Infelizmente, teremos de pedir sempre que encerrar esta guia, o que pode acontecer se encerrar o navegador ou reiniciar o seu computador.", + "description": "Descrição de Confirmação de Cópias de Segurança" + }, + "backupsConfirmAllow": { + "message": "Permitir ao MyTechPassport Continuar a Efetuar Cópias de Segurança das Gravações", + "description": "Botão Permitir na Confirmação de Cópias de Segurança" + }, + "backupsToggle": { + "message": "Efetuar Cópias de Segurança das Gravações", + "description": "Etiqueta de Alternar Cópias de Segurança" + }, + "backupPermissionFailTitle": { + "message": "Permissão Não Concedida para Efetuar uma Cópia de Segurança da Gravação", + "description": "Título de Falha de Permissão de Cópia de Segurança" + }, + "backupPermissionFailDescription": { + "message": "Não selecionou uma pasta para efetuar uma cópia local das suas gravações. Dependendo da versão do seu navegador ou sistema operativo, poderá ser solicitado a selecionar a pasta sempre que iniciar uma gravação. Pode tentar novamente ou desativar as cópias de segurança por completo se preferir não conceder permissões repetidamente.", + "description": "Descrição de Falha de Permissão de Cópia de Segurança" + }, + "recordAudioWarningMacTitle": { + "message": "Gravar Áudio do Computador", + "description": "Título do Aviso de Áudio para macOS" + }, + "recordAudioWarningMacDescription": { + "message": "No macOS, só pode gravar áudio das guias. Selecione a opção 'Guia do Chrome' e certifique-se de que 'Também partilhar áudio da guia' está ativado.", + "description": "Descrição do Aviso de Áudio para macOS" + }, + "recordAudioWarningOtherTitle": { + "message": "Gravar Áudio do Computador", + "description": "Título do Aviso de Áudio para Outros Sistemas" + }, + "recordAudioWarningOtherDescription": { + "message": "Certifique-se de ativar a opção 'Partilhar áudio do sistema' se desejar gravar áudio do computador. Se não visualizar esta opção, tente atualizar o Chrome ou alternar para a gravação de guias.", + "description": "Descrição do Aviso de Áudio para Outros Sistemas" + }, + + "maxResolutionLabel": { + "message": "Resolução máxima", + "description": "Etiqueta de resolução máxima no menu de configurações" + }, + "maxFPSLabel": { + "message": "Máximo de FPS", + "description": "Etiqueta de máximo de FPS no menu de configurações" + }, + + "notEnoughRAM": { + "message": "Memória RAM insuficiente", + "description": "Etiqueta de memória RAM insuficiente no menu de configurações" + }, + "resizeWindowLabel": { + "message": "Redimensionar janela", + "description": "Rótulo de redimensionar janela no menu de configurações" + }, + "screenTooSmallTooltip": { + "message": "O ecrã é demasiado pequeno para esta resolução", + "description": "Dica de ecrã muito pequeno no menu de configurações" + }, + "maxResolutionTooltip": { + "message": "Não é possível gravar nesta resolução no seu dispositivo", + "description": "Dica de resolução máxima no menu de configurações" + }, + "permissionsModalReview": { + "message": "Rever permissões", + "description": "Botão de rever permissões" + } +} diff --git a/build/_locales/ru/messages.json b/build/_locales/ru/messages.json new file mode 100644 index 0000000..c5bb301 --- /dev/null +++ b/build/_locales/ru/messages.json @@ -0,0 +1,1040 @@ +{ + "extName": { + "message": "MyTechPassport - Запись экрана & Аннотации", + "description": "Название расширения" + }, + "extDesc": { + "message": "Лучший бесплатный экран записи без ограничений. Захват, аннотация, масштабирование, размытие, редактирование видео и многое другое - без необходимости входа и с уважением к конфиденциальности.", + "description": "Описание расширения" + }, + "recordTab": { + "message": "Запись", + "description": "Метка вкладки записи на всплывающем окне" + }, + "videosTab": { + "message": "Ваши видео", + "description": "Метка вкладки видео на всплывающем окне" + }, + "screenType": { + "message": "Экран", + "description": "Метка типа записи экрана на всплывающем окне" + }, + "tabType": { + "message": "Область вкладки", + "description": "Метка типа записи области вкладки на всплывающем окне" + }, + "cameraType": { + "message": "Камера", + "description": "Метка типа записи с камеры на всплывающем окне" + }, + "mockupType": { + "message": "Макет", + "description": "Метка типа записи макета на всплывающем окне" + }, + "customAreaRecordingDisabledTitle": { + "message": "Запись в произвольной области отключена", + "description": "Предупреждение о выключенной записи в произвольной области для версии Chrome старше 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Обновите версию Chrome до 110+", + "description": "Описание предупреждения о выключенной записи в произвольной области для версии Chrome старше 104" + }, + "customAreaRecordingDisabledAction": { + "message": "Обновить", + "description": "Действие предупреждения о выключенной записи в произвольной области для версии Chrome старше 104" + }, + "permissionsModalTitle": { + "message": "Проверьте разрешения", + "description": "Заголовок модального окна предупреждения о разрешениях для камеры / микрофона" + }, + "permissionsModalDescription": { + "message": "Похоже, MyTechPassport не может получить доступ к вашей камере или микрофону. Убедитесь, что разрешаете доступ, нажав на значок камеры в строке адреса.", + "description": "Описание модального окна предупреждения о разрешениях для камеры / микрофона" + }, + "permissionsModalDismiss": { + "message": "Отклонить", + "description": "Кнопка закрытия модального окна предупреждения о разрешениях для камеры / микрофона" + }, + "allowCameraAccessButton": { + "message": "Разрешить доступ к камере", + "description": "Кнопка разрешения доступа к камере" + }, + "allowMicrophoneAccessButton": { + "message": "Разрешить доступ к микрофону", + "description": "Кнопка разрешения доступа к микрофону" + }, + "pushToTalkLabel": { + "message": "Нажмите, чтобы говорить", + "description": "Метка переключения 'Push to talk'" + }, + "customAreaLabel": { + "message": "Установите область для записи", + "description": "Метка переключения 'Custom area'" + }, + "flipCameraLabel": { + "message": "Повернуть камеру", + "description": "Метка переключения 'Flip camera'" + }, + "backgroundEffectsLabel": { + "message": "Эффекты фона", + "description": "Метка переключения 'Background effects'" + }, + "recordButtonLabel": { + "message": "Начать запись", + "description": "Метка кнопки записи" + }, + "recordButtonInProgressLabel": { + "message": "Запуск записи...", + "description": "Метка кнопки записи в процессе" + }, + "recordButtonNoCameraLabel": { + "message": "Выберите камеру для записи", + "description": "Метка кнопки записи в режиме камеры, когда не выбрана камера" + }, + "showMoreOptionsLabel": { + "message": "Показать больше опций", + "description": "Метка для показа больше опций" + }, + + "systemAudioLabel": { + "message": "Включить системный звук", + "description": "Метка системного звука/вкладка" + }, + "hideToolbarLabel": { + "message": "Скрыть панель инструментов", + "description": "Метка для скрытия панели инструментов" + }, + "countdownLabel": { + "message": "Обратный отсчет", + "description": "Метка для обратного отсчета" + }, + "alarmLabel": { + "message": "Установить временное ограничение", + "description": "Метка для установки временного ограничения" + }, + "blurTypeLabel": { + "message": "Размыть", + "description": "Метка для размытия фона" + }, + "noneDropdownLabel": { + "message": "Нет", + "description": "Не выбрано устройство" + }, + "noCameraDropdownLabel": { + "message": "Нет камеры", + "description": "Не выбрана камера" + }, + "noMicrophoneDropdownLabel": { + "message": "Нет микрофона", + "description": "Не выбран микрофон" + }, + "selectSourceDropdownPlaceholder": { + "message": "Выберите источник", + "description": "Заглушка для выбора источника" + }, + "offLabel": { + "message": "Выкл", + "description": "Метка для отключения в выпадающем списке" + }, + "regionWidthLabel": { + "message": "Ширина", + "description": "Метка для ширины области" + }, + "regionHeightLabel": { + "message": "Высота", + "description": "Метка для высоты области" + }, + "addImageToastTitle": { + "message": "Щелкните, чтобы разместить изображение", + "description": "Всплывающее уведомление при добавлении нового изображения" + }, + "finishRecordingTooltip": { + "message": "Завершить запись", + "description": "Подсказка для завершения записи" + }, + "restartRecordingTooltip": { + "message": "Перезапустить запись", + "description": "Подсказка для перезапуска записи" + }, + "pauseRecordingTooltip": { + "message": "Приостановить запись", + "description": "Подсказка для приостановки записи" + }, + "resumeRecordingTooltip": { + "message": "Продолжить запись", + "description": "Подсказка для продолжения записи" + }, + "cancelRecordingTooltip": { + "message": "Отменить запись", + "description": "Подсказка для отмены записи" + }, + "toggleDrawingToolsTooltip": { + "message": "Переключить инструменты рисования", + "description": "Подсказка для переключения инструментов рисования" + }, + "toggleBlurToolTooltip": { + "message": "Переключить инструмент размытия", + "description": "Подсказка для переключения инструментов размытия" + }, + "toggleCursorOptionsTooltip": { + "message": "Переключить настройки курсора", + "description": "Подсказка для переключения настроек курсора" + }, + "disableCameraTooltip": { + "message": "Отключить камеру", + "description": "Подсказка для отключения камеры" + }, + "enableCameraTooltip": { + "message": "Включить камеру", + "description": "Подсказка для включения камеры" + }, + "noCameraPermissionsTooltip": { + "message": "Нет разрешения на использование камеры", + "description": "Подсказка о отсутствии разрешения на использование камеры" + }, + "disableMicrophoneTooltip": { + "message": "Отключить микрофон", + "description": "Подсказка для отключения микрофона" + }, + "enableMicrophoneTooltip": { + "message": "Включить микрофон", + "description": "Подсказка для включения микрофона" + }, + "noMicrophonePermissionsTooltip": { + "message": "Нет разрешения на использование микрофона", + "description": "Подсказка о отсутствии разрешения на использование микрофона" + }, + "selectToolTooltip": { + "message": "Выбрать инструмент", + "description": "Подсказка для выбора инструмента" + }, + "penToolTooltip": { + "message": "Инструмент ручки", + "description": "Подсказка для инструмента ручки" + }, + "highlighterToolTooltip": { + "message": "Инструмент маркера", + "description": "Подсказка для инструмента маркера" + }, + "eraserToolTooltip": { + "message": "Инструмент стирания", + "description": "Подсказка для инструмента стирания" + }, + "textToolTooltip": { + "message": "Инструмент текста", + "description": "Подсказка для инструмента текста" + }, + "shapeToolTooltip": { + "message": "Инструмент фигур", + "description": "Подсказка для инструмента фигур" + }, + "arrowToolTooltip": { + "message": "Инструмент Стрелка", + "description": "Подсказка для инструмента Стрелка" + }, + "imageToolTooltip": { + "message": "Инструмент Изображение", + "description": "Подсказка для инструмента Изображение" + }, + "undoTooltip": { + "message": "Отменить", + "description": "Подсказка для отмены" + }, + "redoTooltip": { + "message": "Повторить", + "description": "Подсказка для повтора" + }, + "clearCanvasTooltip": { + "message": "Очистить холст", + "description": "Подсказка для очистки холста" + }, + "moreColorsTooltip": { + "message": "Дополнительные цвета", + "description": "Подсказка для дополнительных цветов" + }, + "thickStrokeTooltip": { + "message": "Толстая линия", + "description": "Подсказка для толстой линии" + }, + "mediumStrokeTooltip": { + "message": "Средняя линия", + "description": "Подсказка для средней линии" + }, + "thinStrokeTooltip": { + "message": "Тонкая линия", + "description": "Подсказка для тонкой линии" + }, + "togglePictureinPictureModeTooltip": { + "message": "Переключить режим изображения в картине", + "description": "Подсказка для переключения режима изображения в картине" + }, + "toggleFillTooltip": { + "message": "Включить заливку", + "description": "Подсказка для включения заливки" + }, + "drawingModeToast": { + "message": "Режим рисования", + "description": "Уведомление о режиме рисования" + }, + "blurModeToast": { + "message": "Режим размытия", + "description": "Уведомление о режиме размытия" + }, + "clearBlurredElementsTooltip": { + "message": "Очистить все размытые элементы", + "description": "Подсказка для очистки всех размытых элементов" + }, + "highlightClicksTooltip": { + "message": "Подсветить клики", + "description": "Подсказка для подсветки кликов" + }, + "highlightCursorTooltip": { + "message": "Подсветить курсор", + "description": "Подсказка для подсветки курсора" + }, + "spotlightCursorTooltip": { + "message": "Прожектор на курсор", + "description": "Подсказка для прожектора на курсор" + }, + "permissionsModalNoShowAgain": { + "message": "Больше не показывать", + "description": "Кнопка отклонения в модальном окне разрешений" + }, + "restartModalTitle": { + "message": "Вы уверены, что хотите перезапустить запись?", + "description": "Заголовок модального окна перезапуска записи" + }, + "restartModalDescription": { + "message": "Ваш текущий прогресс видеозаписи будет потерян.", + "description": "Описание модального окна перезапуска записи" + }, + "restartModalRestart": { + "message": "Перезапустить запись", + "description": "Кнопка перезапуска записи в модальном окне" + }, + "restartModalResume": { + "message": "Продолжить запись", + "description": "Кнопка продолжения записи в модальном окне" + }, + "discardModalTitle": { + "message": "Вы уверены, что хотите отменить запись?", + "description": "Заголовок модального окна отмены записи" + }, + "discardModalDescription": { + "message": "Ваш текущий прогресс видеозаписи будет потерян.", + "description": "Описание модального окна отмены записи" + }, + "discardModalDiscard": { + "message": "Отменить запись", + "description": "Кнопка отмены записи в модальном окне" + }, + "discardModalResume": { + "message": "Продолжить запись", + "description": "Кнопка продолжения записи в модальном окне" + }, + "recorderSelectTitle": { + "message": "Выберите, что вы хотите записать", + "description": "Заголовок на странице записи" + }, + "recorderSelectProgressTitle": { + "message": "Идет запись...", + "description": "Заголовок на странице записи во время записи" + }, + "recorderSelectDescription": { + "message": "Оставьте эту вкладку открытой. Она закроется, когда ваша запись будет сохранена.", + "description": "Описание на странице записи" + }, + "sandboxProgressTitle": { + "message": "Подготовка записи...", + "description": "Заголовок на странице песочницы во время записи / сохранения" + }, + "sandboxProgressDescription": { + "message": "Оставьте эту вкладку открытой. Она будет обновлена с вашей записью, как только она будет готова.", + "description": "Описание на странице песочницы во время записи / сохранения" + }, + "sandboxEditorMainTitle": { + "message": "Редактор", + "description": "Заголовок в навигации страницы редактора песочницы" + }, + "sandboxEditorCancelButton": { + "message": "Отмена", + "description": "Кнопка отмены на странице редактора песочницы" + }, + "sandboxEditorRevertButton": { + "message": "Вернуть к оригиналу", + "description": "Кнопка отмены в редакторе песочницы" + }, + "sandboxEditorResetButton": { + "message": "Сбросить", + "description": "Кнопка сброса в редакторе песочницы" + }, + "sandboxEditorSaveButton": { + "message": "Сохранить изменения", + "description": "Кнопка сохранения в редакторе песочницы" + }, + "sandboxEditorSaveProgressButton": { + "message": "Сохранение...", + "description": "Кнопка сохранения в процессе сохранения в редакторе песочницы" + }, + "sandboxAudioDragAndDrop": { + "message": "Перетащите ваш аудиофайл", + "description": "Перетащите аудиофайл в редактор песочницы" + }, + "sandboxAudioOrBrowse": { + "message": "Или нажмите, чтобы выбрать", + "description": "Или нажмите, чтобы выбрать аудиофайл в редакторе песочницы" + }, + "sandboxAudioSettingsTitle": { + "message": "Настройки", + "description": "Заголовок настроек аудио в редакторе песочницы" + }, + "sandboxAudioVolumeLabel": { + "message": "Громкость", + "description": "Метка громкости аудио в редакторе песочницы" + }, + "sandboxAudioUpdateButton": { + "message": "Обновить", + "description": "Кнопка обновления аудио в редакторе песочницы" + }, + "sandboxCropTitle": { + "message": "Обрезать", + "description": "Заголовок обрезки в редакторе песочницы" + }, + "widthLabel": { + "message": "Ширина", + "description": "Метка ширины для свойств" + }, + "heightLabel": { + "message": "Высота", + "description": "Метка высоты для свойств" + }, + "leftLabel": { + "message": "Слева", + "description": "Метка слева для свойств" + }, + "topLabel": { + "message": "Сверху", + "description": "Метка сверху для свойств" + }, + "sandboxEditorTrimInfo": { + "message": "Перетащите ручки и используйте кнопки слева, чтобы редактировать выбранный участок.", + "description": "Информация о обрезке в редакторе песочницы" + }, + "sandboxEditorTrimButton": { + "message": "Обрезать видео", + "description": "Кнопка обрезки в редакторе песочницы" + }, + "sandboxEditorTrimProgressButton": { + "message": "Обрезка...", + "description": "Кнопка обрезки в редакторе песочницы во время обрезки" + }, + "sandboxEditorCutButton": { + "message": "Вырезать участок", + "description": "Кнопка вырезки в редакторе песочницы" + }, + "sandboxEditorCutProgressButton": { + "message": "Вырезка...", + "description": "Кнопка вырезки в редакторе песочницы во время вырезки" + }, + "sandboxEditorMuteButton": { + "message": "Выключить звук", + "description": "Кнопка выключения звука в редакторе песочницы" + }, + "sandboxEditorMuteProgressButton": { + "message": "Выключение звука...", + "description": "Кнопка выключения звука в редакторе песочницы во время выключения звука" + }, + "learnMoreDot": { + "message": "Узнать больше.", + "description": "Узнать больше с точкой" + }, + "undoLabel": { + "message": "Отменить", + "description": "Метка отмены" + }, + "redoLabel": { + "message": "Повторить", + "description": "Метка повтора" + }, + "leaveReview": { + "message": "Оставьте отзыв", + "description": "Кнопка оставления отзыва" + }, + "followForUpdates": { + "message": "Подписаться на обновления", + "description": "Кнопка подписки на обновления" + }, + "offlineLabelTitle": { + "message": "В данный момент вы офлайн", + "description": "Метка офлайн" + }, + "offlineLabelDescription": { + "message": "Некоторые функции недоступны до восстановления подключения", + "description": "Описание метки офлайн" + }, + "offlineLabelTryAgain": { + "message": "Попробуйте снова", + "description": "Кнопка повторной попытки при офлайне" + }, + "updateChromeLabelTitle": { + "message": "Требуется обновление Chrome", + "description": "Метка обновления Chrome" + }, + "updateChromeLabelDescription": { + "message": "Обновите для доступа к дополнительным функциям", + "description": "Описание метки обновления Chrome" + }, + "learnMoreLabel": { + "message": "Узнать больше", + "description": "Кнопка узнать больше" + }, + "overLimitLabelTitle": { + "message": "Видео слишком длинное для обработки локально", + "description": "Метка ограничения более 5 минут в редакторе" + }, + "overLimitLabelDescription": { + "message": "Редактирование и экспорт в формате MP4 недоступны", + "description": "Описание ограничения более 5 минут в редакторе" + }, + "videoProcessingLabelTitle": { + "message": "Видео обрабатывается...", + "description": "Метка обработки видео в редакторе" + }, + "videoProcessingLabelDescription": { + "message": "Обновите для более быстрого редактирования", + "description": "Описание обработки видео в редакторе" + }, + "sandboxEditTitle": { + "message": "Редактирование", + "description": "Заголовок редактора в песочнице" + }, + "noConnectionLabel": { + "message": "Нет соединения", + "description": "Метка отсутствия соединения" + }, + "notAvailableLabel": { + "message": "Недоступно", + "description": "Метка недоступности" + }, + "editButtonTitle": { + "message": "Редактировать видео", + "description": "Кнопка обрезки" + }, + "editButtonDescription": { + "message": "Обрезать, удалять или отключать звук в видео", + "description": "Метка обрезки" + }, + "preparingLabel": { + "message": "Подготовка видео, пожалуйста, подождите...", + "description": "Метка подготовки" + }, + "cropButtonTitle": { + "message": "Обрезать", + "description": "Кнопка обрезки" + }, + "cropButtonDescription": { + "message": "Обрезать и изменять размер видео", + "description": "Метка обрезки" + }, + "addAudioButtonTitle": { + "message": "Добавить аудио", + "description": "Кнопка добавления аудио" + }, + "addAudioButtonDescription": { + "message": "Загрузите свой звук для добавления в видео", + "description": "Метка добавления аудио" + }, + "sandboxSaveTitle": { + "message": "Сохранить", + "description": "Заголовок сохранения в песочнице" + }, + "signOutDriveLabel": { + "message": "Выйти из Диска", + "description": "Метка выхода из Google Диска" + }, + "savingDriveLabel": { + "message": "Сохранение...", + "description": "Метка сохранения в Google Диск" + }, + "saveDriveButtonTitle": { + "message": "Сохранить на Диск", + "description": "Кнопка сохранения в Google Диск" + }, + "saveDriveButtonDescription": { + "message": "Сохранить текущую версию на Google Диск", + "description": "Метка сохранения в Google Диск" + }, + "signInDriveLabel": { + "message": "Войти и сохранить на Диск", + "description": "Метка входа в Google Диск" + }, + "sandboxExportTitle": { + "message": "Экспорт", + "description": "Заголовок экспорта в песочнице" + }, + "downloadingLabel": { + "message": "Загрузка...", + "description": "Метка загрузки" + }, + "downloadWEBMButtonTitle": { + "message": "Скачать как .webm", + "description": "Кнопка скачивания WEBM" + }, + "downloadWEBMButtonDescription": { + "message": "Экспортировать видео в формате .webm", + "description": "Метка скачивания WEBM" + }, + "downloadMP4ButtonTitle": { + "message": "Скачать как .mp4", + "description": "Кнопка скачивания MP4" + }, + "downloadMP4ButtonDescription": { + "message": "Экспортировать видео в формате .mp4 (рекомендуется)", + "description": "Метка скачивания MP4" + }, + "downloadGIFButtonTitle": { + "message": "Скачать как .gif", + "description": "Кнопка скачивания GIF" + }, + "downloadGIFButtonDescription": { + "message": "Экспортировать GIF (максимум 30 секунд)", + "description": "Метка скачивания GIF" + }, + "shareModalSandboxTitle": { + "message": "Поделитесь вашими видео с другими", + "description": "Заголовок модального окна для песочницы" + }, + "shareModalSandboxDescription": { + "message": "Скоро! Оставьте свой адрес электронной почты, чтобы быть в курсе и получать уведомления о доступности функции обмена.", + "description": "Описание модального окна для песочницы" + }, + "shareModalSandboxButton": { + "message": "Присоединиться к списку ожидания", + "description": "Заглушка для адреса электронной почты в модальном окне для песочницы" + }, + "shareSandboxButton": { + "message": "Поделиться видео", + "description": "Кнопка обмена в редакторе песочницы" + }, + "replaceAudioEditor": { + "message": "Заменить существующий аудиофайл", + "description": "Кнопка замены аудиофайла в редакторе" + }, + "zoomToPointPopup": { + "message": "Увеличить к курсору", + "description": "Всплывающее окно для увеличения к курсору" + }, + "stayInPagePopup": { + "message": "Оставаться на странице во время записи", + "description": "Всплывающее окно для оставания на странице" + }, + "micReminderPopup": { + "message": "Предупреждение: микрофон выключен", + "description": "Всплывающее окно напоминания о микрофоне" + }, + "helpPopup": { + "message": "Помощь", + "description": "Кнопка всплывающего окна справки" + }, + "pausedRecordingToast": { + "message": "Запись приостановлена. Нажмите кнопку воспроизведения, чтобы продолжить.", + "description": "Заголовок всплывающего окна приостановленной записи" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport не имеет разрешения на запись вашего экрана", + "description": "Заголовок модального окна разрешения" + }, + "chromePermissionsModalDescription": { + "message": "Для включения записи экрана вы должны предоставить разрешение на запись экрана при запросе от MyTechPassport.", + "description": "Описание модального окна разрешения" + }, + "chromePermissionsModalAction": { + "message": "Включить запись экрана", + "description": "Действие модального окна разрешения" + }, + "chromePermissionsModalCancel": { + "message": "Отмена", + "description": "Отмена модального окна разрешения" + }, + "micMutedModalTitle": { + "message": "Ваш микрофон отключен", + "description": "Заголовок модального окна отключенного микрофона" + }, + "micMutedModalDescription": { + "message": "Для включения звука в вашей записи вам нужно включить микрофон. Хотите продолжить без звука?", + "description": "Описание модального окна отключенного микрофона" + }, + "micMutedModalAction": { + "message": "Да, продолжить", + "description": "Действие модального окна отключенного микрофона" + }, + "micMutedModalCancel": { + "message": "Отмена", + "description": "Отмена модального окна отключенного микрофона" + }, + "setupTitle": { + "message": "Начните работу с MyTechPassport в трех простых шагах:", + "description": "Заголовок шагов настройки" + }, + "setupStep1Before": { + "message": "1- Нажмите на ", + "description": "Шаг 1 настройки, перед значком. Требуется пробел в конце." + }, + "setupStep1After": { + "message": " значок расширения", + "description": "Шаг 1 настройки, после значка. Требуется пробел в начале." + }, + "setupStep2Before": { + "message": "2- Нажмите на ", + "description": "Шаг 2 настройки, перед значком. Требуется пробел в конце." + }, + "setupStep2After": { + "message": " значок закрепления", + "description": "Шаг 2 настройки, после значка. Требуется пробел в начале." + }, + "setupStep3Before": { + "message": "3- Нажмите на ", + "description": "Шаг 3 настройки, перед значком. Требуется пробел в конце." + }, + "setupStep3After": { + "message": " значок MyTechPassportsport для запуска", + "description": "Шаг 3 настройки, после значка. Требуется пробел в начале." + }, + "setupCompleteTitle": { + "message": "Отлично! Вы готовы", + "description": "Заголовок завершения настройки" + }, + "setupCompleteDescription": { + "message": "Теперь вы можете начать запись здесь или в любой другой вкладке.", + "description": "Описание завершения настройки" + }, + "clickHereDrawOnboarding": { + "message": "Нажмите здесь, чтобы рисовать", + "description": "Сообщение об обучении: нажмите здесь" + }, + "countdownMessage": { + "message": "Расслабьтесь. Нажмите в любом месте, чтобы остановить обратный отсчет.", + "description": "Сообщение обратного отсчета" + }, + "sandboxEditorTooSmallInfo": { + "message": "Изменения могут быть неточными для коротких временных интервалов из-за интервалов между кадрами.", + "description": "Информация о слишком маленьком редакторе" + }, + "processingBannerEditor": { + "message": "Видео обрабатывается, воспроизведение может быть неточным или прерываться.", + "description": "Баннер обработки в редакторе" + }, + "croppingInfoTitle": { + "message": "Обрезка может занять некоторое время", + "description": "Заголовок информации об обрезке" + }, + "croppingInfoDescription": { + "message": "Обновите для более быстрой обработки", + "description": "Описание информации об обрезке" + }, + "micOnToast": { + "message": "Микрофон включен", + "description": "Заголовок всплывающего окна включенного микрофона" + }, + "micOffToast": { + "message": "Микрофон отключен", + "description": "Заголовок всплывающего окна отключенного микрофона" + }, + "hideUIAlerts": { + "message": "Скрыть уведомления интерфейса", + "description": "Кнопка скрытия уведомлений интерфейса" + }, + "noShowAgain": { + "message": "Не показывать снова", + "description": "Кнопка 'Не показывать снова'" + }, + "toolbarHoverOnly": { + "message": "Скрывать панель инструментов, когда она не используется", + "description": "Кнопка 'Показывать панель инструментов только при наведении'" + }, + "stopRecording": { + "message": "Остановить запись", + "description": "Кнопка 'Остановить запись' на экране записи" + }, + "updateAnnouncementTitle": { + "message": "Добро пожаловать в новый MyTechPassport!", + "description": "Заголовок объявления об обновлении для существующих пользователей" + }, + "updateAnnouncementDescription": { + "message": "Мы представляем новый дизайн и множество увлекательных функций, но не волнуйтесь, это все еще бесплатное, частное и открытое расширение, которое вы знаете и любите.", + "description": "Описание объявления об обновлении для существующих пользователей" + }, + "updateAnnouncementLearnMore": { + "message": "Узнать больше об обновлении.", + "description": "Ссылка 'Узнать больше' в объявлении об обновлении для существующих пользователей" + }, + "updateAnnouncementButton": { + "message": "Начать", + "description": "Кнопка 'Начать' в объявлении об обновлении для существующих пользователей" + }, + "streamErrorModalTitle": { + "message": "Ошибка при запуске записи", + "description": "Заголовок модального окна ошибки потока" + }, + "streamErrorModalDescription": { + "message": "Похоже, произошла ошибка при запуске записи. Перезапустите браузер и попробуйте снова. Если проблема сохраняется, пожалуйста, свяжитесь с нами по адресу support@MyTechPassport.io.", + "description": "Описание модального окна ошибки потока" + }, + "highestQuality": { + "message": "Наивысшее качество", + "description": "Метка переключения наивысшего качества во всплывающем окне" + }, + "restoreRecording": { + "message": "Восстановить последнюю запись", + "description": "Кнопка восстановления последней записи во всплывающем окне" + }, + "havingIssuesButton": { + "message": "Возникли проблемы?", + "description": "Кнопка проблем в редакторе" + }, + "havingIssuesModalTitle": { + "message": "Не видите свою запись?", + "description": "Заголовок модального окна проблем в редакторе" + }, + "havingIssuesModalDescription": { + "message": "Если вы завершили запись и оказались на этой странице, не видя свое видео, вы можете попробовать скачать необработанные видеоданные, если они доступны. Вы также можете связаться с нами и отправить отчет об ошибке.", + "description": "Описание модального окна проблем в редакторе" + }, + "havingIssuesModalButton": { + "message": "Скачать необработанные видеоданные", + "description": "Кнопка в модальном окне проблем в редакторе" + }, + "havingIssuesModalButton2": { + "message": "Сообщить о проблеме", + "description": "Вторая кнопка в модальном окне проблем в редакторе" + }, + "noRecordingFound": { + "message": "Запись не найдена, извините :(", + "description": "Предупреждение о отсутствии записи в редакторе" + }, + "memoryLimitTitle": { + "message": "Достигнут лимит памяти", + "description": "Заголовок сообщения о достижении лимита памяти" + }, + "memoryLimitDescription": { + "message": "Ваше устройство исчерпало доступную память для записи, что привело к автоматической остановке записи. Если вы хотите записывать дольше, вы можете попробовать уменьшить качество видео или освободить место на вашем устройстве.", + "description": "Описание сообщения о достижении лимита памяти" + }, + "understoodButton": { + "message": "Понятно", + "description": "Кнопка 'Понятно'" + }, + "notEnoughSpaceTitle": { + "message": "Недостаточно места", + "description": "Заголовок сообщения о нехватке места" + }, + "notEnoughSpaceDescription": { + "message": "Для работы MyTechPassport требуется как минимум 1 ГБ свободного места. Пожалуйста, освободите место на вашем устройстве и попробуйте снова.", + "description": "Описание сообщения о нехватке места" + }, + "clearSpaceButton": { + "message": "Удалить предыдущие записи", + "description": "Кнопка 'Удалить предыдущие записи'" + }, + "sandboxAdvancedTitle": { + "message": "Дополнительно", + "description": "Раздел 'Дополнительно' на странице редактора в режиме песочницы" + }, + "rawRecordingButtonTitle": { + "message": "Скачать необработанный видеофайл", + "description": "Кнопка скачивания необработанной записи" + }, + "rawRecordingButtonDescription": { + "message": "Экспорт исходных данных записи", + "description": "Метка скачивания необработанной записи" + }, + "troubleshootButtonTitle": { + "message": "Получить помощь по вашей записи", + "description": "Кнопка Устранения неполадок" + }, + "troubleShootButtonDescription": { + "message": "Восстановите свое видео и решите другие проблемы", + "description": "Метка Устранения неполадок" + }, + "rawRecordingModalTitle": { + "message": "Скачать необработанный видеофайл", + "description": "Заголовок модального окна необработанной записи" + }, + "rawRecordingModalDescription": { + "message": "Необработанный видеофайл - это оригинальный видеофайл, записанный MyTechPassport. Этот видеофайл не обработан и не редактирован, поэтому он может быть очень большим и не всегда можно воспроизвести на всех устройствах. Если у вас возникли проблемы с обработанным видео, вы можете использовать этот файл для восстановления своего видео.", + "description": "Описание модального окна необработанной записи" + }, + "rawRecordingModalButton": { + "message": "Скачать", + "description": "Кнопка модального окна необработанной записи" + }, + "troubleshootModalTitle": { + "message": "Скачать информацию о системе и видеоданные для устранения неполадок", + "description": "Заголовок модального окна Устранения неполадок" + }, + "troubleshootModalDescription": { + "message": "После скачивания отправьте этот файл на support@MyTechPassport.io вместе с любой актуальной информацией. Мы используем эти данные, чтобы помочь вам устранить любые проблемы с расширением и, при возможности, восстановить ваше видео.", + "description": "Описание модального окна Устранения неполадок" + }, + "troubleshootModalButton": { + "message": "Скачать", + "description": "Кнопка модального окна Устранения неполадок" + }, + "overLimitModalTitle": { + "message": "Видео слишком длинное для обработки на вашем устройстве", + "description": "Заголовок модального окна ограничения более 5 минут" + }, + "overLimitModalDescription": { + "message": "Поскольку MyTechPassport полностью конфиденциален и работает локально, его возможности ограничены аппаратными ресурсами вашего устройства. Обработка видео такой длины займет слишком много времени и ресурсов. Но не волнуйтесь, вы всё равно можете скачать файл WEBM или оригинальную запись, но редактирование и экспорт в MP4 недоступны. Тем не менее, вы можете попробовать обработать видео, если осознаете риски.", + "description": "Описание модального окна ограничения более 5 минут" + }, + "overLimitModalButton": { + "message": "Я понимаю риск, попробовать в любом случае", + "description": "Кнопка модального окна ограничения более 5 минут" + }, + "overLimitModalLearnMore": { + "message": "Узнать больше о обработке длинных видео.", + "description": "Ссылка «Узнать больше» в модальном окне ограничения более 5 минут с точкой" + }, + + "recoveryModeTitle": { + "message": "Режим восстановления", + "description": "Заголовок режима восстановления" + }, + + "downloadForTroubleshootingOption": { + "message": "Скачать данные для устранения проблем", + "description": "Опция скачивания для устранения проблем" + }, + "getHelpNav": { + "message": "Центр помощи", + "description": "Элемент навигации помощи" + }, + "audioWarningTitle": { + "message": "Запись аудио с страницы", + "description": "Заголовок предупреждения о звуке" + }, + "audioWarningDescription": { + "message": "Для записи аудио с этой страницы вы должны использовать опцию '$tab$'.", + "description": "Описание предупреждения о звуке", + "placeholders": { + "tab": { + "content": "$1", + "example": "Область вкладки" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Расширение не поддерживается на странице", + "description": "Заголовок предупреждения о не поддерживаемом расширении на вкладке" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport не поддерживался на вашей предыдущей вкладке. Тем не менее, вы все равно можете начать запись здесь, а затем перейти на другую вкладку, но камера и панель инструментов не будут видны.", + "description": "Описание предупреждения о не поддерживаемом расширении на вкладке" + }, + "backupsTitle": { + "message": "Настройка локальных резервных копий для записей в MyTechPassport", + "description": "Заголовок резервных копий" + }, + "backupsDescription1": { + "message": "Сохраняйте копии всех ваших записей. Если вы не настроите резервные копии, ваши записи будут сохранены только при скачивании.", + "description": "Описание резервных копий" + }, + "backupsDescription2": { + "message": "Вам может потребоваться создать новую папку сначала, если вы пытаетесь сохранить записи в папках, таких как 'Загрузки' или других системных папках.", + "description": "Описание резервных копий" + }, + "backupsSelectFolder": { + "message": "Выбрать папку", + "description": "Кнопка Выбрать папку" + }, + "backupsNotNow": { + "message": "Не сейчас", + "description": "Кнопка Не сейчас" + }, + "backupsOnTitle": { + "message": "Ваши записи локально синхронизированы", + "description": "Заголовок активированных резервных копий" + }, + "backupsOnDescription": { + "message": "Для избежания запросов на разрешение при каждой записи рекомендуется оставить эту вкладку открытой.", + "description": "Описание активированных резервных копий" + }, + "backupsClose": { + "message": "Закрыть вкладку в любом случае", + "description": "Кнопка Закрыть вкладку в любом случае" + }, + "backupsStop": { + "message": "Остановить все резервные копии записей", + "description": "Кнопка Остановить резервные копии" + }, + "backupsConfirmTitle": { + "message": "Пожалуйста, подтвердите доступ к вашей локальной папке резервных копий MyTechPassport", + "description": "Заголовок подтверждения резервных копий" + }, + "backupsConfirmDescription": { + "message": "Извините, но нам нужно ваше разрешение еще раз, чтобы продолжить создавать локальные копии ваших записей. К сожалению, нам придется спрашивать каждый раз, когда вы закроете эту вкладку, что может случиться, если вы закроете браузер или перезагрузите компьютер.", + "description": "Описание подтверждения резервных копий" + }, + "backupsConfirmAllow": { + "message": "Разрешить MyTechPassport продолжить создавать резервные копии записей", + "description": "Кнопка Разрешить в подтверждении резервных копий" + }, + "backupsToggle": { + "message": "Создавать резервные копии записей", + "description": "Метка Переключить резервные копии" + }, + "backupPermissionFailTitle": { + "message": "Отказано в разрешении на создание резервных копий записи", + "description": "Заголовок отказа в разрешении на резервное копирование" + }, + "backupPermissionFailDescription": { + "message": "Вы не выбрали папку для создания локальных резервных копий записей. В зависимости от версии вашего браузера или операционной системы, вас могут попросить выбрать папку каждый раз, когда вы начнете запись. Вы можете попробовать снова или полностью отключить резервное копирование, если вы предпочтете не давать разрешения повторно.", + "description": "Описание отказа в разрешении на резервное копирование" + }, + "recordAudioWarningMacTitle": { + "message": "Запись аудио с компьютера", + "description": "Заголовок предупреждения о звуке для macOS" + }, + "recordAudioWarningMacDescription": { + "message": "В macOS вы можете записывать звук только с вкладок. Выберите опцию 'Вкладка Chrome' и убедитесь, что включена опция 'Также делиться аудио с вкладки'.", + "description": "Описание предупреждения о звуке для macOS" + }, + "recordAudioWarningOtherTitle": { + "message": "Запись аудио с компьютера", + "description": "Заголовок предупреждения о звуке для других систем" + }, + "recordAudioWarningOtherDescription": { + "message": "Для записи звука с компьютера убедитесь, что включена опция 'Делиться аудио системы'. Если вы не видите эту опцию, попробуйте обновить Chrome или перейти на опцию записи вкладок.", + "description": "Описание предупреждения о звуке для других систем" + }, + "maxResolutionLabel": { + "message": "Максимальное разрешение", + "description": "Метка максимального разрешения в меню настроек" + }, + "maxFPSLabel": { + "message": "Максимальное количество кадров в секунду", + "description": "Метка максимального количества кадров в секунду в меню настроек" + }, + + "notEnoughRAM": { + "message": "Недостаточно оперативной памяти", + "description": "Метка 'Недостаточно оперативной памяти' в меню настроек" + }, + "resizeWindowLabel": { + "message": "Изменить размер окна", + "description": "Метка изменения размера окна в меню настроек" + }, + "screenTooSmallTooltip": { + "message": "Экран слишком мал для этого разрешения", + "description": "Подсказка о слишком маленьком экране в меню настроек" + }, + "maxResolutionTooltip": { + "message": "Невозможно записать в этом разрешении на вашем устройстве", + "description": "Подсказка о максимальном разрешении в меню настроек" + }, + "permissionsModalReview": { + "message": "Просмотреть разрешения", + "description": "Кнопка просмотра разрешений" + } +} diff --git a/build/_locales/ta/messages.json b/build/_locales/ta/messages.json new file mode 100644 index 0000000..f150cfc --- /dev/null +++ b/build/_locales/ta/messages.json @@ -0,0 +1,1040 @@ +{ + "extName": { + "message": "ஸ்க்ரீனிட்டி - திரைப்பதிவு & குறிப்புகள்", + "description": "நீட்சிதம் பெயர்" + }, + "extDesc": { + "message": "எந்த வரம்பின்னரும் இல்லாமாக உள்ள சிறந்த இலவச திரை படிக்குழு. படத்தை பிடிக்க, குறிப்பிடுக, அமை, மெதுவாக்கு, வீடியோக்களை திருத்துகின்றன மற்றும் மேலும் - புகுபதிக்க அந்த பேர் பதிவு செய்ய இல்லை, மற்றும் தனியுரிமை பருவமாக இருக்கின்றது.", + "description": "நீட்சிதம் விளக்கம்" + }, + "recordTab": { + "message": "பதிவு", + "description": "பதிவு தலைப்பு படிதம்" + }, + "videosTab": { + "message": "உங்கள் வீடியோக்கள்", + "description": "வீடியோக்கள் தலைப்பு படிதம்" + }, + "screenType": { + "message": "திரை", + "description": "திரை படம் பதிவு வகை படிதம்" + }, + "tabType": { + "message": "கையெழுத்து பகுதி", + "description": "கையெழுத்து பகுதி படம் பதிவு வகை படிதம்" + }, + "cameraType": { + "message": "கேமரா", + "description": "கேமரா பதிவு வகை படிதம்" + }, + "mockupType": { + "message": "மாக்கப்", + "description": "மாக்கப் பதிவு வகை படிதம்" + }, + "customAreaRecordingDisabledTitle": { + "message": "தனிப்பட்ட பகுதி பதிவு முடக்கப்பட்டுள்ளது", + "description": "கூடித் தனிப்பட்ட பகுதி பதிவு முடக்கப்பட்டுள்ளது எச்சரிக்கை படம் (Chrome பதிப்பு 104 க்கு குறைந்த பதிப்புகள்)" + }, + "customAreaRecordingDisabledDescription": { + "message": "Chrome பதிப்பு 110+ க்கு புதுப்பிக்கவும்", + "description": "கூடித் தனிப்பட்ட பகுதி பதிவு முடக்கப்பட்டுள்ளது எச்சரிக்கை விளக்கம் (Chrome பதிப்பு 104 க்கு குறைந்த பதிப்புகள்)" + }, + "customAreaRecordingDisabledAction": { + "message": "புதுப்பிக்க", + "description": "104 க்கு குறுகிய க்ரோம் பதிப்புகளுக்கு மேம்படுத்த மாட்சியை முடக்கிய பிரிவு பதிப்பு எச்சரிக்கை செய்தியாகும்" + }, + "permissionsModalTitle": { + "message": "உங்கள் அனுமதிகளை சரிபார்க்கவும்", + "description": "கேமரா / மைக்ரோஃபோன் அனுமதிகள் எச்சரிக்கை செய்தியின் தலைப்பு" + }, + "permissionsModalDescription": { + "message": "போன்று போன்று தேர்வு செய்வதற்கு உங்கள் கேமரா அல்லது மைக்ரோஃபோனுக்கு அணுகலை அனுமதிக்க முடியவில்லை. அணுகலை அனுமதிக்க அனுமதி அளிக்க அடியில் கேமரா ஐகானை கிளிக் செய்து அனுமதி அளிக்கவும்.", + "description": "கேமரா / மைக்ரோஃபோன் அனுமதிகள் எச்சரிக்கை செய்தியின் விளக்கம் விளக்கம்" + }, + "permissionsModalDismiss": { + "message": "விலகு", + "description": "கேமரா / மைக்ரோஃபோன் அனுமதிகள் எச்சரிக்கை செய்தியின் விளக்கம் விளக்கம்" + }, + "allowCameraAccessButton": { + "message": "கேமரா அணுகலை அனுமதிக்கவும்", + "description": "கேமரா அணுகலை அனுமதிக்க பொத்தான்" + }, + "allowMicrophoneAccessButton": { + "message": "மைக்ரோஃபோன் அணுகலை அனுமதிக்கவும்", + "description": "மைக்ரோஃபோன் அணுகலை அனுமதிக்க பொத்தான்" + }, + "pushToTalkLabel": { + "message": "அழுக்கு", + "description": "அழுக்கு ஸ்விட்ச் பொத்தான்" + }, + "customAreaLabel": { + "message": "புதுப்பிக்க பருவத்தை அமைக்கவும்", + "description": "புதுப்பிக்க ஸ்விட்ச் பொத்தான்" + }, + "flipCameraLabel": { + "message": "கேமரா தளம்", + "description": "கேமரா தளம் ஸ்விட்ச் பொத்தான்" + }, + "backgroundEffectsLabel": { + "message": "பின்னணி விளைவுகள்", + "description": "பின்னணி விளைவுகள் ஸ்விட்ச் பொத்தான்" + }, + "recordButtonLabel": { + "message": "பதிவு செய்ய ஆரம்பிக்கவும்", + "description": "பதிவு பொத்தான் பொத்தான்" + }, + "recordButtonInProgressLabel": { + "message": "பதிவு ஆரம்பிக்கின்றது...", + "description": "பதிவு பொத்தான் செயலி ஆரம்பிக்கின்றது செய்தி" + }, + "recordButtonNoCameraLabel": { + "message": "கேமரா அமைக்கவும்", + "description": "கேமரா முறையில் உள்ளபடியாக கேமரா தேர்வு செய்தால் உள்ளபடி கேமரா செய்தி" + }, + "showMoreOptionsLabel": { + "message": "மேலும் விருப்பங்கள் காட்டு", + "description": "மேலும் விருப்பங்கள் செய்தி" + }, + "systemAudioLabel": { + "message": "அமைப்பு ஒலியை சேர்க்கவும்", + "description": "அமைப்பு ஒலி குறியீடு/அறை" + }, + "hideToolbarLabel": { + "message": "கட்டுப்பாடு மறை", + "description": "கட்டுப்பாடு மறை செய்தி" + }, + "countdownLabel": { + "message": "எண்ணிக்கை செய்யவும்", + "description": "எண்ணிக்கை செய்தி" + }, + "alarmLabel": { + "message": "நேரம் எதிர்க்காட்டவும்", + "description": "அலாரம் செய்தி" + }, + "blurTypeLabel": { + "message": "மறை", + "description": "பிரிவு பிரிப்பு செய்தி" + }, + "noneDropdownLabel": { + "message": "இல்லை", + "description": "சாதனம் தேர்வு செய்தி" + }, + "noCameraDropdownLabel": { + "message": "கேமரா இல்லை", + "description": "கேமரா தேர்வு செய்தி" + }, + "noMicrophoneDropdownLabel": { + "message": "மைக்ரோஃபோன் இல்லை", + "description": "மைக்ரோஃபோன் தேர்வு செய்தி" + }, + "selectSourceDropdownPlaceholder": { + "message": "ஒரு மூலம் தேர்வு செய்யவும்", + "description": "மூலம் தேர்வு செய்தி உள்ளிடம்" + }, + "offLabel": { + "message": "அணுக்கம் இல்லை", + "description": "அணுக்கம் இல்லை செய்தி கீழே" + }, + "regionWidthLabel": { + "message": "அகலம்", + "description": "பிரிவு அகல செய்தி" + }, + "regionHeightLabel": { + "message": "உயரம்", + "description": "பிரிவு உயர செய்தி" + }, + "addImageToastTitle": { + "message": "படம் வைக்க கிளிக் செய்யவும்", + "description": "புதிய படம் சேர்க்கும் போப்அப் தலைப்பு" + }, + "finishRecordingTooltip": { + "message": "பதிவு முடிக்க", + "description": "பதிவு முடிக்க குழப்பு" + }, + "restartRecordingTooltip": { + "message": "பதிவு மீட்டல்", + "description": "பதிவு மீட்டல் குழப்பு" + }, + "pauseRecordingTooltip": { + "message": "பதிவு முடிக்க", + "description": "பதிவு முடிக்க குழப்பு" + }, + "resumeRecordingTooltip": { + "message": "பதிவு தொடங்க", + "description": "பதிவு தொடங்க குழப்பு" + }, + "cancelRecordingTooltip": { + "message": "பதிவு ரத்து செய்", + "description": "பதிவு ரத்து செய் உத்திபத்தி" + }, + "toggleDrawingToolsTooltip": { + "message": "வரையறு கருவிகள் சோதனை செய்யுங்கள்", + "description": "வரையறு கருவிகள் சோதனை செய் உத்திபத்தி" + }, + "toggleBlurToolTooltip": { + "message": "சுரூரிட கருவியை மாற்று", + "description": "சுரூரிட கருவிகள் சோதனை செய் உத்திபத்தி" + }, + "toggleCursorOptionsTooltip": { + "message": "கோசர் விருப்பங்களை மாற்று", + "description": "கோசர் விருப்பங்களை மாற்று உத்திபத்தி" + }, + "disableCameraTooltip": { + "message": "கேமரா முடக்கு", + "description": "கேமரா முடக்கு உத்திபத்தி" + }, + "enableCameraTooltip": { + "message": "கேமரா இயக்கு", + "description": "கேமரா இயக்கு உத்திபத்தி" + }, + "noCameraPermissionsTooltip": { + "message": "கேமரா அனுமதிகள் இல்லை", + "description": "கேமரா அனுமதிகள் இல்லை உத்திபத்தி" + }, + "disableMicrophoneTooltip": { + "message": "மைக்ரோஃபோன் முடக்கு", + "description": "மைக்ரோஃபோன் முடக்கு உத்திபத்தி" + }, + "enableMicrophoneTooltip": { + "message": "மைக்ரோஃபோன் இயக்கு", + "description": "மைக்ரோஃபோன் இயக்கு உத்திபத்தி" + }, + "noMicrophonePermissionsTooltip": { + "message": "மைக்ரோஃபோன் அனுமதிகள் இல்லை", + "description": "மைக்ரோஃபோன் அனுமதிகள் இல்லை உத்திபத்தி" + }, + "selectToolTooltip": { + "message": "கருவியை தேர்ந்தெடு", + "description": "கருவி உத்திபத்தி" + }, + "penToolTooltip": { + "message": "பேன் கருவி", + "description": "பேன் கருவி உத்திபத்தி" + }, + "highlighterToolTooltip": { + "message": "முக்கியமான கருவி", + "description": "முக்கியமான கருவி உத்திபத்தி" + }, + "eraserToolTooltip": { + "message": "மொழி கருவி", + "description": "மொழி கருவி உத்திபத்தி" + }, + "textToolTooltip": { + "message": "உரை கருவி", + "description": "உரை கருவி உத்திபத்தி" + }, + "shapeToolTooltip": { + "message": "வடிவ கருவி", + "description": "வடிவ கருவி உத்திபத்தி" + }, + "arrowToolTooltip": { + "message": "அம்பு கருவி", + "description": "அம்பு கருவி உத்திபத்தி" + }, + "imageToolTooltip": { + "message": "படம் கருவி", + "description": "படம் கருவி உத்திபத்தி" + }, + "undoTooltip": { + "message": "மீட்டமை", + "description": "மீட்டமை குருவி" + }, + "redoTooltip": { + "message": "மீட்டமை செய்", + "description": "மீட்டமை செய் குருவி" + }, + "clearCanvasTooltip": { + "message": "கவசம் அழி", + "description": "கவச டூல்டிப்" + }, + "moreColorsTooltip": { + "message": "மேலும் வண்ணங்கள்", + "description": "மேலும் வண்ணங்கள் டூல்டிப்" + }, + "thickStrokeTooltip": { + "message": "படிக்குழப்பு அச்சு", + "description": "படிக்குழப்பு அச்சு டூல்டிப்" + }, + "mediumStrokeTooltip": { + "message": "இடைச்சுழப்பு அச்சு", + "description": "இடைச்சுழப்பு அச்சு டூல்டிப்" + }, + "thinStrokeTooltip": { + "message": "இலேமெண்ட் அச்சு", + "description": "இலேமெண்ட் அச்சு டூல்டிப்" + }, + "togglePictureinPictureModeTooltip": { + "message": "புகைப்படத்தில் புகைப்பட", + "description": "புகைப்படத்தில் புகைப்பட டூல்டிப்" + }, + "toggleFillTooltip": { + "message": "நிரப்பு செய்", + "description": "நிரப்பு செய் டூல்டிப்" + }, + "drawingModeToast": { + "message": "வரைபட முடிந்தது", + "description": "வரைபட முடிந்தது டோஸ்ட்" + }, + "blurModeToast": { + "message": "மயிர் முடிந்தது", + "description": "மயிர் முடிந்தது டோஸ்ட்" + }, + "clearBlurredElementsTooltip": { + "message": "அனைத்து மூடிய உருக்கங்களையும் அகற்று", + "description": "அனைத்து மூடிய உருக்கங்களையும் அகற்று டூல்டிப்" + }, + "highlightClicksTooltip": { + "message": "கிளிக்குகளை குறிக்க", + "description": "கிளிக்குகளை குறிக்க டூல்டிப்" + }, + "highlightCursorTooltip": { + "message": "கோர்சரை குறிக்க", + "description": "கோர்சரை குறிக்க டூல்டிப்" + }, + "spotlightCursorTooltip": { + "message": "கோர்சரை ஒளிப்படுத்து", + "description": "கோர்சரை ஒளிப்படுத்து டூல்டிப்" + }, + "permissionsModalNoShowAgain": { + "message": "மீது காண்பிக்க வேண்டாம்", + "description": "அனுமதிகள் மோடால் காண்பிக்க பொதுப்படுத்து பொத்தான்" + }, + "restartModalTitle": { + "message": "புதியதாக பதிவுசெய்ய விரும்புகிறீர்களா?", + "description": "புதியதாக பதிவுசெய்ய விரும்புகிறீர்களா மோடால் தலைப்பு" + }, + "restartModalDescription": { + "message": "உங்கள் தற்போதைய வீடியோ முன்னேற்றம் இழக்கப்படும்.", + "description": "மீள் அமைப்பு மாடல் விளக்கம்" + }, + "restartModalRestart": { + "message": "வீடியோ மீள் அமைப்பு", + "description": "மீள் அமைப்பு மாடல் மீள் அமைப்பு பொத்தான்" + }, + "restartModalResume": { + "message": "வீடியோ செயலாக்கம் தொடர்க", + "description": "மீள் அமைப்பு மாடல் தொடர்க பொத்தான்" + }, + "discardModalTitle": { + "message": "நீங்கள் வீடியோ செயலாக்கியில் துணைமைக்கப்படுவீர்களா?", + "description": "வீடியோ விலக்க மாடல் தலைப்பு" + }, + "discardModalDescription": { + "message": "உங்கள் தற்போதைய வீடியோ முன்னேற்றம் இழக்கப்படும்.", + "description": "வீடியோ விலக்க மாடல் விளக்கம்" + }, + "discardModalDiscard": { + "message": "வீடியோ விலக்கு", + "description": "வீடியோ விலக்க மாடல் விலக்கு பொத்தான்" + }, + "discardModalResume": { + "message": "வீடியோ செயலாக்கம் தொடர்க", + "description": "வீடியோ விலக்க மாடல் தொடர்க பொத்தான்" + }, + "recorderSelectTitle": { + "message": "நீங்கள் எந்தவையை பதிவு செய்ய விரும்புகின்றீர்கள் என்று தேர்ந்தெடுக்கவும்", + "description": "பதிவு பக்கத்தில் தலைப்பு" + }, + "recorderSelectProgressTitle": { + "message": "பதிவுசெய்தல்...", + "description": "பதிவு பக்கத்தில் பதிவுசெய்தல் போன்ற தலைப்பு" + }, + "recorderSelectDescription": { + "message": "இந்த உதவியை மூட வேண்டும். உங்கள் பதிவு சேமிக்கப்பட்ட பிறகு அந்த உதவியும் மூடப்படும்.", + "description": "பதிவு பக்கத்தில் விளக்கம்" + }, + "sandboxProgressTitle": { + "message": "பதிவுசெய்தல் தயாராகிக் கொள்ளப்படுகின்றது...", + "description": "பதிவு பக்கத்தில் பதிவுசெய்தல் / சேமிக்குகின்ற போன்ற தலைப்பு" + }, + "sandboxProgressDescription": { + "message": "இந்த உதவியை மூட வேண்டும். அது உங்கள் பதிவு சேமிக்கப்பட்ட பிறகு அப்டேட் செய்யும்.", + "description": "பதிவு பக்கத்தில் விளக்கம்" + }, + "sandboxEditorMainTitle": { + "message": "எடிட்டர்", + "description": "மையத்தின் வழிமுறைப்பு பக்கத்தின் தலைப்பு" + }, + "sandboxEditorCancelButton": { + "message": "ரத்து செய்", + "description": "ரத்து செய்க பொத்தான் முகத்தில் உள்ள பொத்தான்" + }, + "sandboxEditorRevertButton": { + "message": "மூல செய்தி திரும்பு", + "description": "மூல செய்தி திரும்பு பொத்தான் முகத்தில் உள்ள பொத்தான்" + }, + "sandboxEditorResetButton": { + "message": "மீட்டமை", + "description": "மீட்டமை பொத்தான் முகத்தில் உள்ள பொத்தான்" + }, + "sandboxEditorSaveButton": { + "message": "மாற்றங்கள் சேமிக்க", + "description": "சேமிப்பு பொத்தான் முகத்தில் உள்ள பொத்தான்" + }, + "sandboxEditorSaveProgressButton": { + "message": "சேமிப்பதில்...", + "description": "சேமிப்பு பொத்தான் முகத்தில் உள்ள பொத்தான்" + }, + "sandboxAudioDragAndDrop": { + "message": "உங்கள் ஒலியின் கோப்பை விளக்கம் செய்யவும்", + "description": "ஒலி கோப்பை விளக்கம் செய்யவும் பொத்தான் முகத்தில் உள்ள பொத்தான்" + }, + "sandboxAudioOrBrowse": { + "message": "அல்லது பார்க்க கிளிக் செய்யவும்", + "description": "ஒலி கோப்பை பார்க்க கிளிக் செய்யவும் பொத்தான் முகத்தில் உள்ள பொத்தான்" + }, + "sandboxAudioSettingsTitle": { + "message": "அமைப்புகள்", + "description": "ஒலி அமைப்புகள் தலைப்பு பொத்தான் முகத்தில் உள்ள பொத்தான்" + }, + "sandboxAudioVolumeLabel": { + "message": "ஒலி அளவு", + "description": "ஒலி அளவு விளக்கம் பொத்தான் முகத்தில் உள்ள பொத்தான்" + }, + "sandboxAudioUpdateButton": { + "message": "புதுப்பி", + "description": "ஒலி புதுப்பி பொத்தான் முகத்தில் உள்ள பொத்தான்" + }, + "sandboxCropTitle": { + "message": "வெட்டு", + "description": "வெட்டு தலைப்பு பொத்தான் முகத்தில் உள்ள பொத்தான்" + }, + "widthLabel": { + "message": "பருவம்", + "description": "சொத்துக்கள் குறிப்புக்கு பருவம் விளக்கம்" + }, + "heightLabel": { + "message": "உயரம்", + "description": "சொத்துக்கள் குறிப்புக்கு உயரம் விளக்கம்" + }, + "leftLabel": { + "message": "இடம்", + "description": "குறிப்பிட்ட பணியாளர் விவரங்கள் சிட்டில் இடம் குறிப்பு" + }, + "topLabel": { + "message": "மேல்", + "description": "குறிப்பிட்ட பணியாளர் விவரங்கள் சிட்டில் மேல் குறிப்பு" + }, + "sandboxEditorTrimInfo": { + "message": "ஹாண்டிளை இழுக்கவும் மற்றும் தொகுப்புகளை பயன்படுத்த இடது பட்டன்களை பயன்படுத்தவும்.", + "description": "சாண்ட்பாக்ஸ் எடிட்டிங்கில் வித்திக்குது பற்றிய விவரங்கள்" + }, + "sandboxEditorTrimButton": { + "message": "வீடியோ குறை", + "description": "சாண்ட்பாக்ஸ் எடிட்டிங்கில் குறை பட்டன்" + }, + "sandboxEditorTrimProgressButton": { + "message": "குறைக்கின்றது...", + "description": "சாண்ட்பாக்ஸ் எடிட்டிங்கில் குறை பட்டன் வித்திக்கின்றது போன்ற போது" + }, + "sandboxEditorCutButton": { + "message": "பிளவு வைத்துப்படு", + "description": "சாண்ட்பாக்ஸ் எடிட்டிங்கில் கட் பட்டன்" + }, + "sandboxEditorCutProgressButton": { + "message": "கட்டுகின்றது...", + "description": "சாண்ட்பாக்ஸ் எடிட்டிங்கில் கட் பட்டன் வித்திக்கின்றது போன்ற போது" + }, + "sandboxEditorMuteButton": { + "message": "ஒலியை முடக்கு", + "description": "சாண்ட்பாக்ஸ் எடிட்டிங்கில் ஒலி முடக்கு பட்டன்" + }, + "sandboxEditorMuteProgressButton": { + "message": "ஒலி முடக்குகின்றது...", + "description": "சாண்ட்பாக்ஸ் எடிட்டிங்கில் ஒலி முடக்கு பட்டன் வித்திக்கின்றது போன்ற போது" + }, + "learnMoreDot": { + "message": "அதிகம் அறிய", + "description": "ஒரு டாட் சொல் சார்பு வெளியீடு செய்யும்" + }, + "undoLabel": { + "message": "மீட்டமை", + "description": "மீட்டமை செய்" + }, + "redoLabel": { + "message": "மீட்டமை செய்", + "description": "மீட்டமை செய் செய்" + }, + "leaveReview": { + "message": "ஒரு மதிப்பீடு விளக்க", + "description": "விமர்சனம் விடுங்கள் பட்டன்" + }, + "followForUpdates": { + "message": "புதுப்பிப்புக்காக பின்னுங்கள்", + "description": "புதுப்பிப்புக்காக பின்னுங்கள் பட்டன்" + }, + "offlineLabelTitle": { + "message": "நீங்கள் தற்போது ஆஃப்லைன்", + "description": "ஆஃப்லைன் லேபிள்" + }, + "offlineLabelDescription": { + "message": "சில அம்சங்கள் மீண்டும் இணைக்கப்படும் வரை கிடைக்காது", + "description": "ஆஃப்லைன் லேபிள் விளக்கம்" + }, + "offlineLabelTryAgain": { + "message": "மீண்டும் முயற்சி செய்", + "description": "ஆஃப்லைன் லேபிள் மீண்டும் முயற்சி செய் பொத்தான்" + }, + "updateChromeLabelTitle": { + "message": "கூகுள் புதுப்பிக்க வேண்டும்", + "description": "கைப்பு கூகுள் புதுப்பிப்பு லேபிள்" + }, + "updateChromeLabelDescription": { + "message": "கூகுள் கைப்பு கூட்டுத்தளம் அணுக புதுப்பிக்கவும்", + "description": "கைப்பு கூகுள் புதுப்பிப்பு லேபிள் விளக்கம்" + }, + "learnMoreLabel": { + "message": "மேலும் அறிய", + "description": "மேலும் அறிய பொத்தான்" + }, + "overLimitLabelTitle": { + "message": "உங்கள் சாதனத்தில் வீடியோ மிகம் நீளம்", + "description": "எடிட்டரில் 5 நிமிடத்திற்குக் கீழ் வரும் கட்டுரை" + }, + "overLimitLabelDescription": { + "message": "திருத்தல் மற்றும் MP4 வடிவம் விரும்பில்லை", + "description": "எடிட்டரில் 5 நிமிடத்திற்குக் கீழ் வரும் விளக்கம்" + }, + "videoProcessingLabelTitle": { + "message": "வீடியோ செயலாக்கப்படுகின்றது...", + "description": "வீடியோ செயலாக்க லேபிள் இன் பதிவு" + }, + "videoProcessingLabelDescription": { + "message": "விரிவாக்க மற்றும் விருத்திப் பதிவு செய்வதற்கு மேல் புதுப்பிப்பு செய்யவும்", + "description": "வீடியோ செயலாக்க விளக்கம் இன் பதிவு" + }, + "sandboxEditTitle": { + "message": "திருத்து", + "description": "மின்னணு திருத்து பக்கத்தில் திருத்த தலைப்பு" + }, + "noConnectionLabel": { + "message": "இணைப்பு இல்லை", + "description": "இணைப்பு லேபிள்" + }, + "notAvailableLabel": { + "message": "கிடைக்காது", + "description": "கிடைக்காது லேபிள்" + }, + "editButtonTitle": { + "message": "வீடியோ திருத்து", + "description": "குறைத்து திருத்த பொத்தான்" + }, + "editButtonDescription": { + "message": "வீடியோவை குறைத்து, வெட்டுக்கள் அல்லது பாரம் செய்யுங்கள்", + "description": "குறைத்து பொத்தான்" + }, + "preparingLabel": { + "message": "வீடியோ தயாரிக்கப்படுகின்றது, தயவு செய்து காத்திருக்கவும்...", + "description": "தயாரிக்கின்றது லேபிள்" + }, + "cropButtonTitle": { + "message": "வீடியோவை வெட்டு", + "description": "வெட்டு பொத்தான் பொத்தான்" + }, + "cropButtonDescription": { + "message": "வீடியோவை வெட்டுக்கும் மற்றும் அளவை அமைக்கவும்", + "description": "வெட்டு பொத்தான்" + }, + "addAudioButtonTitle": { + "message": "ஒலியை சேர்", + "description": "ஒலி பொத்தான் பொத்தான்" + }, + "addAudioButtonDescription": { + "message": "உங்கள் சொந்த ஒலியை வீடியோக்கு சேர்க்க பொத்தான்", + "description": "ஒலி பொத்தான்" + }, + "sandboxSaveTitle": { + "message": "சேமிக்க", + "description": "மின்னணு திருத்து பக்கத்தில் சேமிக்க தலைப்பு" + }, + "signOutDriveLabel": { + "message": "டிரைவை விடு", + "description": "கூகுள் டிரைவ் பெயர் விடுக" + }, + "savingDriveLabel": { + "message": "சேமிக்கப்படுகின்றது...", + "description": "கூகுள் டிரைவ் கீபேழ்க" + }, + "saveDriveButtonTitle": { + "message": "டிரைவ் கீபேழ்க", + "description": "கூகுள் டிரைவ் பொத்தான் பொத்தான்" + }, + "saveDriveButtonDescription": { + "message": "தற்போதைய பதிப்பை கூகுள் டிரைவ் கீபேழ்க", + "description": "கூகுள் டிரைவ் பொத்தான்" + }, + "signInDriveLabel": { + "message": "உள்நுழைக்கி டிரைவ் கீபேழ்க", + "description": "கூகுள் டிரைவ் பெயர் விடுக" + }, + "sandboxExportTitle": { + "message": "ஏற்று", + "description": "மின்னணு திருத்து பக்கத்தில் ஏற்ற தலைப்பு" + }, + "downloadingLabel": { + "message": "பதிவிறக்குதல்...", + "description": "பதிவிறக்குதல் லேபிள்" + }, + "downloadWEBMButtonTitle": { + "message": ".webm ஆகப் பதிவிறக்க", + "description": "WEBM பொத்தான் பொத்தான்" + }, + "downloadWEBMButtonDescription": { + "message": ".webm வீடியோவை ஏற்று", + "description": "WEBM பொத்தான்" + }, + "downloadMP4ButtonTitle": { + "message": ".mp4 ஆகப் பதிவிறக்க", + "description": "MP4 பொத்தான் பொத்தான்" + }, + "downloadMP4ButtonDescription": { + "message": ".mp4 வீடியோ ஏற்றுக் கொள்ள (பரிந்துரைக்கப்படுகின்றது)", + "description": ".mp4 பொத்தான் பொத்தான்" + }, + "downloadGIFButtonTitle": { + "message": ".gif ஆகப் பதிவிறக்க", + "description": "GIF பொத்தான் பொத்தான்" + }, + "downloadGIFButtonDescription": { + "message": "GIF ஐ ஏற்று (அதிகம் 30 வினாடிகள்)", + "description": "GIF பொத்தான்" + }, + "shareModalSandboxTitle": { + "message": "உங்கள் வீடியோக்களை பிரித்தியம் பகிருங்கள்", + "description": "மின்னணு திருத்தி திருத்தி பக்கத்தில் பகிரும் மின்னணு திருத்தி திருத்தி பெயர்" + }, + "shareModalSandboxDescription": { + "message": "விரைவில்! பகிர்ந்திருக்கின்றோம்! பகிர்ந்துகொள்ள உங்கள் மின்னணு அஞ்சலை விட்டு போக விரும்பினால் அப்பதிவு செய்து விடவும்.", + "description": "மின்னணு திருத்தி மின்னணு பெயர் மின்னணு பெயர்" + }, + "shareModalSandboxButton": { + "message": "காத்திருக்க காத்திருக்க", + "description": "மின்னணு திருத்தி மின்னணு பெயர் மின்னணு பெயர் பிளேச்ஹோல்டர் மின்னணு பெயர் மின்னணு பெயர்" + }, + "shareSandboxButton": { + "message": "வீடியோ பகிர்", + "description": "மின்னணு திருத்தி மின்னணு பெயர் மின்னணு பெயர்" + }, + "replaceAudioEditor": { + "message": "தற்போதைய ஒலியை மாற்றுக", + "description": "தொகுப்பாளி இல் ஒலி பெயர்" + }, + "zoomToPointPopup": { + "message": "கோர்சரை முடக்கு", + "description": "புள்ளி புள்ளி பெயர் பொத்தான்" + }, + "stayInPagePopup": { + "message": "பதிவு செய்யும் பேஜில் உள்ளே இரு", + "description": "பக்க படுகின்றது பப்ப்" + }, + "micReminderPopup": { + "message": "மைக்ரோஃபோன் அணை எச்சரிக்கை", + "description": "மைக் அனுக்கிரிப் பப்" + }, + "helpPopup": { + "message": "உத்தமம்", + "description": "உத்தமம் பப் பொத்தான்" + }, + "pausedRecordingToast": { + "message": "பதிவு நிறுத்தப்பட்டது. மீடியோ தொடர இயக்க புத்தரம் அழுக்கவும்.", + "description": "தற்போது இயக்கப்படுகின்ற விசை பட்டியல் தற்போது இயக்கப்படுகின்றது" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassportsportsportsport உங்கள் திரையை பதிவு செய்ய அனுமதியில்லை", + "description": "அனுமதி பட்டியல் தலைப்பு" + }, + "chromePermissionsModalDescription": { + "message": "திரை பதிவு செய்ய உங்கள் திரையை காட்சிப்படுத்த அனுமதி இயக்க வேண்டும். போக்கில் உங்கள் திரையை பட்டியல் தலைப்பில் அனுமதி இயக்கவும்.", + "description": "அனுமதி பட்டியல் விளக்கம்" + }, + "chromePermissionsModalAction": { + "message": "திரை பதிவை இயக்கு", + "description": "அனுமதி பட்டியல் செயல்" + }, + "chromePermissionsModalCancel": { + "message": "ரத்து செய்", + "description": "அனுமதி பட்டியல் ரத்து" + }, + "micMutedModalTitle": { + "message": "உங்கள் மைக்ரோஃபோன் அமைக்கப்பட்டுள்ளது", + "description": "மைக்ரோஃபோன் அமைக்கப்பட்டுள்ள தலைப்பு" + }, + "micMutedModalDescription": { + "message": "உங்கள் பதிவுக்கு ஒலி சேர்க்க உங்கள் மைக்ரோஃபோன் அமைக்க வேண்டும். ஒலி இல்லாதிருந்தால் தொடர்வது விரும்புகின்றீர்களா?", + "description": "மைக்ரோஃபோன் அமைக்கப்பட்டுள்ள விளக்கம்" + }, + "micMutedModalAction": { + "message": "ஆம், தொடர", + "description": "மைக்ரோஃபோன் அமைக்கப்பட்டுள்ள விளக்கம் தொடர்வது" + }, + "micMutedModalCancel": { + "message": "ரத்து செய்", + "description": "மைக்ரோஃபோன் அமைக்கப்பட்டுள்ள விளக்கம் ரத்து" + }, + "setupTitle": { + "message": "மூன்று எளிய படிகளில் ஸ்கிரீனிடி பயன்படுத்த ஆரம்பிக்கவும்:", + "description": "அமைதிகள் தலைப்பு" + }, + "setupStep1Before": { + "message": "1- கிளிக் செய்யவும் ", + "description": "அமைதிப் படிகள் பட்டியல் 1, ஐகானுக்கு முந்திர விசை தேவை." + }, + "setupStep1After": { + "message": " நீக்குதல் ஐகான்", + "description": "அமைதிப் படிகள் பட்டியல் 1, ஐகானுக்கு பின்னர் விசை தேவை." + }, + "setupStep2Before": { + "message": "2- அழுத்தவும் ", + "description": "அமைதிப் படிகள் பட்டியல் 2, ஐகானுக்கு முந்திர விசை தேவை." + }, + "setupStep2After": { + "message": " அடைவு ஐகான்", + "description": "அமைதிப் படிகள் பட்டியல் 2, ஐகானுக்கு பின்னர் விசை தேவை." + }, + "setupStep3Before": { + "message": "3- கிளிக் செய்யவும் ", + "description": "அமைதிப் படிகள் பட்டியல் 3, ஐகானுக்கு முந்திர விசை தேவை." + }, + "setupStep3After": { + "message": " MyTechPassportsportsport ஐகானை தொடர்க", + "description": "அமைதிப் படிகள் பட்டியல் 3, ஐகானுக்கு பின்னர் விசை தேவை." + }, + "setupCompleteTitle": { + "message": "அற்புதம்! உங்கள் அமைப்பு அனைத்து அமைப்புகளும் அமைந்துவிட்டன", + "description": "அமைதிப் படிகள் படிகள் பட்டியல் தலைப்பு" + }, + "setupCompleteDescription": { + "message": "நீங்கள் இப்போது இங்கே அல்லது வேறு பக்கத்தில் பதிவு செய்ய முடியும்.", + "description": "அமைதிப் படிகள் படிகள் பட்டியல் விளக்கம்" + }, + "clickHereDrawOnboarding": { + "message": "எங்கேயும் வரையுங்கள்", + "description": "இங்கே செய்ய வரையுங்கள்" + }, + "countdownMessage": { + "message": "சமாதானமாக. எங்கேயும் கிளிக் செய்யவும் எண்ணிக்கொள்ள முடியும்.", + "description": "எண்ணிக்கொள்ள செய்தி" + }, + "sandboxEditorTooSmallInfo": { + "message": "பட்டியல்கள் படிகளை திருத்த நிரப்பாது கூடிய கால இடங்களுக்காக வடிவங்கள் இடைவெளிக்காட்டப்படும் காரணமாக, திருத்தங்கள் தவறாக இருக்கலாம்.", + "description": "எடிட்டர் சிறியப் படிகள் படிக்கும் தகவல்" + }, + "processingBannerEditor": { + "message": "வீடியோ செயலாக்கப்படுகின்றது, விளக்கத்துக்குச் சிறந்த அல்லது அடுத்துப் பார்க்கப்படும் என்று புதியது சொல்கின்றது.", + "description": "எடிட்டரில் செயலாக்கப்படும் அற்புத விளக்கம்" + }, + "croppingInfoTitle": { + "message": "வெட்டுத்ததம் சிறிய நேரம் ஆகலாம்", + "description": "வெட்டுத்தம் தகவல் தலைப்பு" + }, + "croppingInfoDescription": { + "message": "விரைவாக செயலாக்க முடியும் என்று மேம்படுகின்றது", + "description": "வெட்டுத்தம் தகவல் விளக்கம்" + }, + "micOnToast": { + "message": "மைக்ரோஃபோன் இயக்கப்பட்டுள்ளது", + "description": "மைக்ரோஃபோன் இயக்கப்பட்டுள்ளது விளக்க தலைப்பு" + }, + "micOffToast": { + "message": "மைக்ரோஃபோன் முடக்கப்பட்டுள்ளது", + "description": "மைக்ரோஃபோன் முடக்கப்பட்டுள்ளது விளக்க தலைப்பு" + }, + "hideUIAlerts": { + "message": "UI அறிவிப்புகளை மறை", + "description": "UI அறிவிப்புகளை மறைக்க பொது பொது" + }, + "noShowAgain": { + "message": "மீண்டும் காட்ட விரும்பாதே", + "description": "மீண்டும் காட்ட விரும்பாதே பொது" + }, + "toolbarHoverOnly": { + "message": "பயன்படுத்தப்பட்ட போக்குகை மீட்டை மறை", + "description": "ஹோவர் பொத்தாக்கல் முக்கியம் பொது பொது" + }, + "stopRecording": { + "message": "பதிவு முடிக்க", + "description": "பதிவு முடிக்க பொது பொது" + }, + "updateAnnouncementTitle": { + "message": "புதிய MyTechPassportsport க்கு வரவேற்கின்றது!", + "description": "அந்தப் பயனாளர்களுக்காக புதியது அற்புதம் தலைப்பு" + }, + "updateAnnouncementDescription": { + "message": "நாங்கள் புதிய பார்வையும் அந்தப் பயனாளர்களுக்கு அற்புதமான அமைப்பை அறிமுகப்படுத்துகின்றோம், ஆனால் சிறுபக்கங்கள் அனைத்து இலவச, தனியுரிமையுடன் மூன்று விளம்பரச் செயல்பாடுகளாக இல்லை என்றாக, அதே கூட நீங்கள் அறிந்து கொள்ளும் மற்றும் காத்திருப்பதே அந்த படிவிக்கு மீதம்.", + "description": "அப்டேட் அறிவிப்பு விளக்கம் ஏற்படும் பயனாளர்களுக்கு" + }, + "updateAnnouncementLearnMore": { + "message": "அப்டேட் பற்றி மேலும் அறிந்து கொள்ளவும்.", + "description": "அப்டேட் அறிவிப்பு மேலும் அறிந்து கொள்ள பட்டன் பயனாளர்களுக்கு" + }, + "updateAnnouncementButton": { + "message": "ஆரம்பிக்கவும்", + "description": "அப்டேட் அறிவிப்பு பட்டன் பயனாளர்களுக்கு" + }, + "streamErrorModalTitle": { + "message": "பதிவு ஆரம்பிப்பதில் பிழை", + "description": "ஸ்ட்ரீம் பிழை மாடல் தலைப்பு" + }, + "streamErrorModalDescription": { + "message": "பதிவு ஆரம்பிப்பதில் ஒரு பிழை ஏற்பட்டதேன் என்று பார்க்கின்றது. உங்கள் உலாவி மீளவும் முயலுக்காக மீளவும் முயலவும் முயலுக்கு மீள்வார்கள். சிந்தனை தொடர்ந்து உத்தரவு பெறுகின்றதில், தயவுசெய்து எங்களுடன் தொடர்க support@MyTechPassportsport.io என்ற முகவரிக்கு தொடர்பு கொள்ளவும்.", + "description": "ஸ்ட்ரீம் பிழை மாடல் விளக்கம்" + }, + "highestQuality": { + "message": "அதிசய உயர தரம்", + "description": "பாப் பப் வரிசையில் அதிசய உயர தரம் லேபிள்" + }, + "restoreRecording": { + "message": "கடைசி பதிவு மீட்டமை", + "description": "பாப் பப் வரிசையில் கடைசி பதிவு மீட்டமை பட்டன்" + }, + "havingIssuesButton": { + "message": "பிரச்சினைகள் உள்ளனவா?", + "description": "எடிட்டரில் பிரச்சினைகள் பொத்தான்" + }, + "havingIssuesModalTitle": { + "message": "உங்கள் ரெக்கார்டிங் காணாதுவா?", + "description": "எடிட்டரில் பிரச்சினை படிக்கு தலைப்பு" + }, + "havingIssuesModalDescription": { + "message": "உங்கள் ரெக்கார்டிங் முடிந்துவிட்டது மற்றும் உங்கள் வீடியோவை காணாத அவகாச வீடியோ தரவை பெற்ற பிறகு, அது கிடைக்கின்றால் உங்கள் அசையப்பட்ட வீடியோ தரவை பதிவிறக்க முயற்சிக்கலாம். அந்த தரவு கிடைக்கின்றதில், பிழை அறிக்கை அனுப்பி அழைக்கலாம்.", + "description": "எடிட்டரில் பிரச்சினை படிவம்" + }, + "havingIssuesModalButton": { + "message": "அவகாச வீடியோ தரவை பதிவிறக்குங்கள்", + "description": "எடிட்டரில் பிரச்சினை படிக்கு பொத்தான்" + }, + "havingIssuesModalButton2": { + "message": "பிழை அறிக்கை செய்க", + "description": "எடிட்டரில் பிரச்சினை படிக்கு இரண்டாவது பொத்தான்" + }, + "noRecordingFound": { + "message": "ஒரு பதிவுக்கு காணப்பட்டதில்லை, மன்னிக்கவும் :(", + "description": "எடிட்டரில் ஒரு பதிவுக்கு காணப்பட்டதில்லை எச்சரிக்கை" + }, + "memoryLimitTitle": { + "message": "நினைவர வரம்பு அடைந்துள்ளது", + "description": "நினைவர வரம்பு அடைந்துள்ளது தலைப்பு" + }, + "memoryLimitDescription": { + "message": "உங்கள் சாதனம் பதிவு செய்ய உள்ள நினைவரம் முழுவதும் அவசியமாக அடைந்துள்ளது, அதனால் பதிவு தானியக்கம் நிறுத்தப்பட்டுள்ளது. கூடுதல் காலம் பதிவு செய்ய விரும்பினால், வீடியோ தரம் குறைக்க அல்லது உங்கள் சாதனத்தில் சில இடம் வெளியிட முடியும் என்பதை முயற்சிக்கலாம்.", + "description": "நினைவர வரம்பு அடைந்துள்ளது விளக்கம்" + }, + "understoodButton": { + "message": "புரிந்தேன்", + "description": "புரிந்தேன் பட்டன்" + }, + "notEnoughSpaceTitle": { + "message": "புதியவில் போக்கு இல்லை", + "description": "புதியவில் போக்கு இல்லை தலைப்பு" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassportsport பதிவு செய்ய குண்டெய்க குண்டு முதல் 1 ஜிபி குளையிடம் தேவை. உங்கள் சாதனத்தில் இடம் வெளியிடும்போது, தயவுசெய்து இடம் வெளியிட்டு மீட்டெடுக்கவும்.", + "description": "புதியவில் போக்கு இல்லை விளக்கம்" + }, + "clearSpaceButton": { + "message": "முந்தைய பதிவுகளை நீக்கு", + "description": "முந்தைய பதிவுகளை நீக்கு பட்டன்" + }, + "sandboxAdvancedTitle": { + "message": "உயர்தரம்", + "description": "பராமரிப்பு எடிட்டர் பகுதி பரம்பரையில்" + }, + "rawRecordingButtonTitle": { + "message": "மூல வீடியோ கோப்புகளை பதிவிறக்கம் செய்க", + "description": "மூல பதிவிறக்கம் பட்டன்" + }, + "rawRecordingButtonDescription": { + "message": "உயர்நிலை பதிவிறக்க தரவை வழங்குக", + "description": "மூல பதிவிறக்கம் லேபிள்" + }, + "troubleshootButtonTitle": { + "message": "உங்கள் பதிவிறக்கத்தில் உதவியை பெறுங்கள்", + "description": "பிரச்சினைக்கு பெறுவதற்கான பட்டன்" + }, + "troubleShootButtonDescription": { + "message": "உங்கள் வீடியோவை மீட்டரியாக்குகின்றது மற்றும் பிற சிக்கல்களை தீர்க்க", + "description": "பிரச்சினைக்கு பெறுவதற்கான லேபிள்" + }, + "rawRecordingModalTitle": { + "message": "மூல வீடியோ கோப்புகளை பதிவிறக்கம் செய்க", + "description": "மூல பதிவிறக்கம் மாடல் தலைப்பு" + }, + "rawRecordingModalDescription": { + "message": "மூல வீடியோ கோப்பு, ஸ்க்ரீனிட்டி மூலம் பதிக்கப்பட்ட உண்மை வீடியோ கோப்புக்கு அமைந்தது. இந்த வீடியோ செயலாக்கப்படாதது அல்லது திருத்தப்படாதது, அது மிக பெரியதாக இருக்கலாம் மற்றும் அனைத்து சாதனங்களிலும் புரட்டாததாக இருக்கலாம். உங்கள் செயலாக்க வீடியோவில் சிக்கல்கள் உள்ளதில், இந்த கோப்பை உங்கள் வீடியோவை மீட்டரியாக்க மற்றும் மேலும் திருத்த படுத்த முடியும்.", + "description": "மூல பதிவிறக்கம் மாடல் விளக்கம்" + }, + "rawRecordingModalButton": { + "message": "பதிவிறக்குக", + "description": "மூல பதிவிறக்கம் மாடல் பட்டன்" + }, + "troubleshootModalTitle": { + "message": "அமைப்பு தகவலுக்கு மற்றும் வீடியோ தரவுகளுக்கு உதவிக்கு அளிக்கவும்", + "description": "தகவலுக்கு உதவி மாடல் தலைப்பு" + }, + "troubleshootModalDescription": { + "message": "பதிவிறக்கும் பின், இந்த கோப்பை support@MyTechPassport.io க்கு அனுப்புங்கள் மற்றும் அதிக தொடர்பான தகவலுடன். நாங்கள் இந்த தரவை பயன்படுத்தி உங்கள் விளக்க பெறும் பிரச்சினைகளை தீர்க்க உதவுவோம் மற்றும் வாடிக்கைக்கு வரை உங்கள் வீடியோவை மீட்டரியாக்குவதில் முடியும் என்பதை நிச்சயமாக சொல்லுக.", + "description": "தகவலுக்கு உதவி மாடல் விளக்கம்" + }, + "troubleshootModalButton": { + "message": "பதிவிறக்குக", + "description": "தகவலுக்கு உதவி மாடல் பட்டன்" + }, + "overLimitModalTitle": { + "message": "உங்கள் சாதனத்தில் விடியோ பொதுவாக செயல்படுத்த முடியவில்லை", + "description": "5 நிமிட வாரந்தோற்ற உள்ளடக்கம் உடைய மாதிரி மோடல் தலைப்பு" + }, + "overLimitModalDescription": { + "message": "MyTechPassport முழுவதும் தனியாக உழைந்து உழைக்கும் போது, உங்கள் சாதனத்தின் உபகரண வகைகளால் கட்டாயமாக வர்ம்வேர் செய்வது. இந்த நீளம் உள்ள விடியோவை செயல்படுத்துவது மிகவும் நேரம் எடுக்கும் மற்றும் மிகவும் வளர்ச்சியடையும். ஆனால் வேறு பரிமாற்றம் முடியும் என்று கவனிக்கவும், நீங்கள் இந்த அபரிசீலிதம் புரிந்திருந்தால்.", + "description": "5 நிமிட வாரந்தோற்ற உள்ளடக்கம் மோடல் விளக்கம்" + }, + "overLimitModalButton": { + "message": "ஞாபகம், அதை முயற்சிக்கவும்", + "description": "5 நிமிட வாரந்தோற்ற உள்ளடக்கம் மோடல் பட்டன்" + }, + "overLimitModalLearnMore": { + "message": "நீண்ட வீடியோக்களை செயல்படுத்துவது பற்றிய மேலும் அறிந்து கொள்ளுங்கள்.", + "description": "5 நிமிட வாரந்தோற்ற உள்ளடக்கம் மோடல் மேலும் அறிந்து கொள்ளுங்கள் இணைப்பு மூலம்" + }, + + "recoveryModeTitle": { + "message": "மீட்டமைப்பு முறை", + "description": "மீட்டமைப்பு முறை தலைப்பு" + }, + + "downloadForTroubleshootingOption": { + "message": "பிரச்சனைகளை தீர்க்க தரவை பதிவிறக்கவும்", + "description": "பிரச்சனைகளை தீர்க்க விருப்ப பதிவிறக்க விருப்பம்" + }, + "getHelpNav": { + "message": "உதவி மையம்", + "description": "உதவி வழியிடம் உருவாக்குதல்" + }, + "audioWarningTitle": { + "message": "பக்கத்தில் ஒலி பதிவு", + "description": "ஒலி எச்சரிக்கை தலைப்பு" + }, + "audioWarningDescription": { + "message": "இந்த பக்கத்தில் ஒலியை பதிவு செய்ய உங்கள் விருப்பத்தை '$tab$' விருப்பம் பயன்படுத்த வேண்டும்.", + "description": "ஒலி எச்சரிக்கை விளக்கம்", + "placeholders": { + "tab": { + "content": "$1", + "example": "Tab area" + } + } + }, + "extensionNotSupportedTitle": { + "message": "பக்கத்தில் கொள்ளும்போது ஆதரிக்கப்படாத நீக்கம்", + "description": "அட்டவணை ஆதரிக்கப்படாத நீக்கம் தலைப்பு" + }, + "extensionNotSupportedDescription": { + "message": "உங்கள் முந்தைய பக்கத்தில் MyTechPassport ஆதரிக்கப்படவில்லை. இதையடுத்து, நீங்கள் இங்கே பதிவு ஆரம்பிக்கலாம், அப்போது மற்றொரு பக்கத்திற்கு செல்ல அநுமதிக்கப்படும், ஆனால் உங்கள் கேமரா மற்றும் கருவிப்பட்டி காணப்படாது.", + "description": "அட்டவணை ஆதரிக்கப்படாத நீக்கம் விளக்கம்" + }, + "backupsTitle": { + "message": "உங்கள் MyTechPassport பதிவுகளுக்கான உள்ளூர் காப்பிடுதல் அமைத்துக்கொள்க", + "description": "காப்பிடுதல் தலைப்பு" + }, + "backupsDescription1": { + "message": "நீங்கள் செய்த அனைத்து பதிவுகளின் ஒரு நகர்வு சொல்லியில் வைக்கவும். உங்கள் உள்ளூரை காப்பிடுவதில் தடுமாற்றம் அமையவில்லை, நீங்கள் அவை பதிவிறக்குவதை விரும்பும்போது மட்டும் பதிவு செய்யப்படும்.", + "description": "காப்பிடுதல் விளக்கம்" + }, + "backupsDescription2": { + "message": "நீங்கள் பதிவு செய்ய விரும்பும்போது, 'பதிவுகள்' போன்ற அமைப்புகளில் பதிவு செய்ய முதல் புதிய கோப்பகத்தை உருவாக்க வேண்டும்.", + "description": "காப்பிடுதல் விளக்கம்" + }, + "backupsSelectFolder": { + "message": "ஒரு கோப்பகம் தேர்ந்தெடுக்க", + "description": "கோப்பக தேர்ந்தெடுத்தோர் பொத்தான்" + }, + "backupsNotNow": { + "message": "இப்போது அல்ல", + "description": "இப்போது பொத்தான்" + }, + "backupsOnTitle": { + "message": "உங்கள் பதிவுகள் இடப்பட்டிருக்கின்றன", + "description": "செயல்பாட்டு காப்புகள் தலைப்பு" + }, + "backupsOnDescription": { + "message": "பதிவிடும்போது ஒலி பதிவிறக்க விண்ணப்பங்களை கேட்டுக் கொள்கின்ற போது ஒலி பதிவிறக்க வேண்டாம், இந்த அட்டவணையை மூடவும் என்று பரிந்துரைக்கப்படுகின்றது.", + "description": "செயல்பாட்டு காப்புகள் விளக்கம்" + }, + "backupsClose": { + "message": "பக்கத்தை அதேசமயம் மூடு", + "description": "அதேசமயம் பக்கத்தை மூடு" + }, + "backupsStop": { + "message": "அனைத்து பதிவு காப்புகளையும் நிறுத்து", + "description": "பக்கத்து காப்பிடுதல் நிறுத்து" + }, + "backupsConfirmTitle": { + "message": "தயவுசெய்து MyTechPassport உங்கள் உள்ளூர் கோப்பகத்துக்கு அணுகலை மீள்க", + "description": "காப்பிடுதல் உறுதிப்படுத்துதல் தலைப்பு" + }, + "backupsConfirmDescription": { + "message": "மன்னிக்கவும், உங்கள் பதிவிகளின் உள்ளூர் நகர்வுக்கு உங்கள் அனுமதியை மீண்டும் சேமிக்க தேவை. அதிசயமாக, நீங்கள் இந்த அட்டவணையை எப்போதும் மூடுவது வேண்டும், அது உங்கள் உலாவியை மூடும் அல்லது உங்கள் கணினியை மீட்டரைக் கொண்டு மீண்டும் ஆரம்பிக்கலாம் என்று சொல்கின்றது.", + "description": "காப்பிடுதல் உறுதிப்படுத்துதல் விளக்கம்" + }, + "backupsConfirmAllow": { + "message": "MyTechPassport பதிவிகளை தொடர்ந்து காப்புகள் உருவாக்க அனுமதிக்க", + "description": "காப்பிடுதல் உறுதிப்படுத்துதல் அனுமதிக்க" + }, + "backupsToggle": { + "message": "பதிவுகளின் காப்பிடுதல் செய்ய", + "description": "காப்பிடுதல் மூலம் வார்த்தை" + }, + "backupPermissionFailTitle": { + "message": "பதிவு காப்பிடுதல் அனுமதி முடக்கப்பட்டது", + "description": "காப்பிடுதல் அனுமதி தோல்வி தலைப்பு" + }, + "backupPermissionFailDescription": { + "message": "உங்கள் பதிவுகளின் உள்நிலை நகல் செய்ய ஒரு கோப்பகத்தை தேர்வு செய்தவில்லை. உங்கள் உலாவியம் அல்லது இயக்கம் பதிப்பின் பதிப்பிக்கு விருப்பம் கோரப்படும், நீங்கள் எப்போதும் பதிவுசெய்து அநுமதிக்க கேட்கப்படலாம். நீங்கள் அநுமதிகளை அனைத்தும் அவாரமாக வழிநடத்துவதை விரும்பின்றிதல் போன்றதான்.", + "description": "பூர்வமாக அனுமதி பிழை விளக்கம்" + }, + "recordAudioWarningMacTitle": { + "message": "கணினியிலிருந்து ஒலியை பதிவுசெய்ய", + "description": "macOS க்கு ஒலியின் எச்சரிக்கை தலைப்பு" + }, + "recordAudioWarningMacDescription": { + "message": "macOS-ல், நீங்கள் வரிசைகளிலிருந்து ஒலியை மட்டும் பதிவுசெய்யலாம். 'Chrome வரிசை' விருப்பத்தை தேர்வு செய்து, 'வரிசை ஒலி குணம் பகிரவும்' என்பதை இயக்கின்றதை உறுதிப்படுத்துங்கள்.", + "description": "macOS க்கு ஒலியை பதிவுசெய்தல் விருப்பம் தலைப்பு" + }, + "recordAudioWarningOtherTitle": { + "message": "கணினியிலிருந்து ஒலியை பதிவுசெய்ய", + "description": "பிற கணினி வடிவம் க்கு ஒலியின் எச்சரிக்கை தலைப்பு" + }, + "recordAudioWarningOtherDescription": { + "message": "கணினியிலிருந்து ஒலியை பதிவுசெய்ய விரும்பினதால், 'கணினி ஒலியை பகிர்க' விருப்பத்தை செயல்படுத்துக. இந்த விருப்பத்தை காணாதிருக்கின்றார் என்பதை பார்க்கின்றதால், Chrome ஐ புதுப்பிக்கவும் அல்லது வரிசை பதிவு விருப்பம் மாற்றுவதை முயற்சிக்கவும்.", + "description": "பிற கணினி வடிவம் க்கு ஒலியின் எச்சரிக்கை தலைப்பு" + }, + + "maxResolutionLabel": { + "message": "அதிசய கருவி", + "description": "அமைப்புகள் பட்டியலில் அதிசய கருவி குறியீட்டு" + }, + "maxFPSLabel": { + "message": "அதிசய கோட்டிகள் கோட்டிகள்", + "description": "அமைப்புகள் பட்டியலில் அதிசய கோட்டிகள் குறியீட்டு" + }, + + "notEnoughRAM": { + "message": "புதிய ரேம் போதுமில்லை", + "description": "அமைப்புக்கு அந்த ரேம் போதுமில்லை பதில்" + }, + "resizeWindowLabel": { + "message": "சாளரம் பருவமை", + "description": "அமைப்புகள் பட்டியலில் சாளரம் பருவமை குறிப்பு" + }, + "screenTooSmallTooltip": { + "message": "இந்த திசையுக்கு உயர்வு மிகவும் சிறியது", + "description": "அமைப்புகள் பட்டியலில் திசை மிகவும் சிறியது குறிப்பு" + }, + "maxResolutionTooltip": { + "message": "உங்கள் சாதனத்தில் இந்த உயர்வில் பதிவு செய்ய முடியாது", + "description": "அமைப்புகள் பட்டியலில் அதிசய உயர்வு குறிப்பு" + }, + "permissionsModalReview": { + "message": "அனுமதிகளை பரவி", + "description": "அனுமதிகளை பரவி பொத்தானை" + } +} diff --git a/build/_locales/tr/messages.json b/build/_locales/tr/messages.json new file mode 100644 index 0000000..5be4dd3 --- /dev/null +++ b/build/_locales/tr/messages.json @@ -0,0 +1,1040 @@ +{ + "extName": { + "message": "MyTechPassport - Ekran Kayıt & Not Aracı", + "description": "Uzantı adı" + }, + "extDesc": { + "message": "Sınırsız en iyi ücretsiz ekran kaydedici. Kayıt, açıklama, yakınlaştırma, bulanıklık, video düzenleme ve daha fazlasını yapın - giriş yapmanıza gerek yok, gizlilik dostu.", + "description": "Uzantı açıklaması" + }, + "recordTab": { + "message": "Kaydet", + "description": "Açılır pencere üzerinde kayıt sekmesi etiketi" + }, + "videosTab": { + "message": "Videolarınız", + "description": "Açılır pencere üzerinde videolar sekmesi etiketi" + }, + "screenType": { + "message": "Ekran", + "description": "Açılır pencere üzerinde ekran kaydı türü etiketi" + }, + "tabType": { + "message": "Sekme alanı", + "description": "Açılır pencere üzerinde sekme alanı kaydı türü etiketi" + }, + "cameraType": { + "message": "Kamera", + "description": "Açılır pencere üzerinde kamera kaydı türü etiketi" + }, + "mockupType": { + "message": "Mockup", + "description": "Açılır pencere üzerinde mockup kaydı türü etiketi" + }, + "customAreaRecordingDisabledTitle": { + "message": "Özel alan kaydı devre dışı", + "description": "Chrome sürümü 104'ten eski olanlar için özel alan kaydı devre dışı uyarısı başlığı" + }, + "customAreaRecordingDisabledDescription": { + "message": "Daha fazla özellik için Chrome sürümünü 110+ olarak güncelleyin", + "description": "Chrome sürümü 104'ten eski olanlar için özel alan kaydı devre dışı uyarısı açıklaması" + }, + "customAreaRecordingDisabledAction": { + "message": "Güncelle", + "description": "Chrome sürümü 104'ten eski olanlar için özel alan kaydı devre dışı uyarısı eylemi" + }, + "permissionsModalTitle": { + "message": "İzinlerinizi kontrol edin", + "description": "Kamera / mikrofon izinleri uyarı modalı başlığı" + }, + "permissionsModalDescription": { + "message": "MyTechPassportsport'nin kamera veya mikrofonunuza erişemiyor gibi görünüyor. Kameranın simgesine tıklayarak erişime izin verdiğinizden emin olun.", + "description": "Kamera / mikrofon izinleri uyarı modalı açıklaması" + }, + "permissionsModalDismiss": { + "message": "Kapat", + "description": "Kamera / mikrofon izinleri uyarı modalı kapatma düğmesi" + }, + "allowCameraAccessButton": { + "message": "Kamera erişimine izin ver", + "description": "Kamera erişimine izin verme düğmesi" + }, + "allowMicrophoneAccessButton": { + "message": "Mikrofon erişimine izin ver", + "description": "Mikrofon erişimine izin verme düğmesi" + }, + "pushToTalkLabel": { + "message": "Konuşmaya başlamak için basın", + "description": "Konuşmaya başla anahtarı etiketi" + }, + "customAreaLabel": { + "message": "Kaydedilecek bir alan belirleyin", + "description": "Özel alan anahtarı etiketi" + }, + "flipCameraLabel": { + "message": "Kamerayı çevir", + "description": "Kamera çevirme anahtarı etiketi" + }, + "backgroundEffectsLabel": { + "message": "Arka plan efektleri", + "description": "Arka plan efektleri anahtarı etiketi" + }, + "recordButtonLabel": { + "message": "Kayda başla", + "description": "Kayıt düğme etiketi" + }, + "recordButtonInProgressLabel": { + "message": "Kayıt başlatılıyor...", + "description": "Kayıt düğmesi işlem süreci etiketi" + }, + "recordButtonNoCameraLabel": { + "message": "Kayıt yapmak için bir kamera seçin", + "description": "Kamera modundayken ve hiçbir kamera seçilmediğinde kayıt düğme etiketi" + }, + "showMoreOptionsLabel": { + "message": "Daha fazla seçeneği göster", + "description": "Daha fazla seçenekler etiketi" + }, + "systemAudioLabel": { + "message": "Sistem sesini dahil et", + "description": "Sistem sesi etiketi/sekmeleri" + }, + "hideToolbarLabel": { + "message": "Araç çubuğunu gizle", + "description": "Araç çubuğunu gizle etiketi" + }, + "countdownLabel": { + "message": "Geri sayım", + "description": "Geri sayım etiketi" + }, + "alarmLabel": { + "message": "Zaman sınırlaması ayarla", + "description": "Alarm etiketi" + }, + "blurTypeLabel": { + "message": "Bulanık", + "description": "Arka planı bulanıklaştır etiketi" + }, + "noneDropdownLabel": { + "message": "Hiçbiri", + "description": "Hiçbir cihaz seçilmedi etiketi" + }, + "noCameraDropdownLabel": { + "message": "Kamera yok", + "description": "Hiçbir kamera seçilmedi etiketi" + }, + "noMicrophoneDropdownLabel": { + "message": "Mikrofon yok", + "description": "Hiçbir mikrofon seçilmedi etiketi" + }, + "selectSourceDropdownPlaceholder": { + "message": "Bir kaynak seçin", + "description": "Kaynak seçme alanı etiketi" + }, + "offLabel": { + "message": "Kapalı", + "description": "Açılır listede Kapalı etiketi" + }, + "regionWidthLabel": { + "message": "Genişlik", + "description": "Bölge genişliği etiketi" + }, + "regionHeightLabel": { + "message": "Yükseklik", + "description": "Bölge yüksekliği etiketi" + }, + "addImageToastTitle": { + "message": "Resim eklemek için tıklayın", + "description": "Yeni bir resim eklenirken gösterilen bilgilendirme penceresi" + }, + "finishRecordingTooltip": { + "message": "Kaydı Bitir", + "description": "Kaydı Bitir araç ipucu" + }, + "restartRecordingTooltip": { + "message": "Kaydı Yeniden Başlat", + "description": "Kaydı Yeniden Başlat araç ipucu" + }, + "pauseRecordingTooltip": { + "message": "Kaydı Durdur", + "description": "Kaydı Durdur araç ipucu" + }, + "resumeRecordingTooltip": { + "message": "Kaydı Devam Ettir", + "description": "Kaydı Devam Ettir araç ipucu" + }, + "cancelRecordingTooltip": { + "message": "Kaydı İptal Et", + "description": "Kaydı İptal Et araç ipucu" + }, + "toggleDrawingToolsTooltip": { + "message": "Çizim Araçlarını Aç/Kapat", + "description": "Çizim Araçlarını Aç/Kapat araç ipucu" + }, + "toggleBlurToolTooltip": { + "message": "Bulanıklaştırma Aracını Aç/Kapat", + "description": "Bulanıklaştırma Aracını Aç/Kapat araç ipucu" + }, + "toggleCursorOptionsTooltip": { + "message": "İşaretçi Seçeneklerini Aç/Kapat", + "description": "İşaretçi Seçeneklerini Aç/Kapat araç ipucu" + }, + "disableCameraTooltip": { + "message": "Kamerayı Kapat", + "description": "Kamerayı Kapat araç ipucu" + }, + "enableCameraTooltip": { + "message": "Kamerayı Aç", + "description": "Kamerayı Aç araç ipucu" + }, + "noCameraPermissionsTooltip": { + "message": "Kamera İzni Yok", + "description": "Kamera İzni Yok araç ipucu" + }, + "disableMicrophoneTooltip": { + "message": "Mikrofonu Kapat", + "description": "Mikrofonu Kapat araç ipucu" + }, + "enableMicrophoneTooltip": { + "message": "Mikrofonu Aç", + "description": "Mikrofonu Aç araç ipucu" + }, + "noMicrophonePermissionsTooltip": { + "message": "Mikrofon İzni Yok", + "description": "Mikrofon İzni Yok araç ipucu" + }, + "selectToolTooltip": { + "message": "Araç Seç", + "description": "Araç Seç araç ipucu" + }, + "penToolTooltip": { + "message": "Kalem Aracı", + "description": "Kalem Aracı araç ipucu" + }, + "highlighterToolTooltip": { + "message": "Marker Aracı", + "description": "Marker Aracı araç ipucu" + }, + "eraserToolTooltip": { + "message": "Silgi Aracı", + "description": "Silgi Aracı araç ipucu" + }, + "textToolTooltip": { + "message": "Metin Aracı", + "description": "Metin Aracı araç ipucu" + }, + "shapeToolTooltip": { + "message": "Şekil Aracı", + "description": "Şekil Aracı araç ipucu" + }, + "arrowToolTooltip": { + "message": "Ok Aracı", + "description": "Ok Aracı araç ipucu" + }, + "imageToolTooltip": { + "message": "Resim Aracı", + "description": "Resim Aracı araç ipucu" + }, + "undoTooltip": { + "message": "Geri Al", + "description": "Geri Al araç ipucu" + }, + "redoTooltip": { + "message": "Yinele", + "description": "Yinele araç ipucu" + }, + "clearCanvasTooltip": { + "message": "Tuvali Temizle", + "description": "Tuvali Temizle araç ipucu" + }, + "moreColorsTooltip": { + "message": "Daha Fazla Renk", + "description": "Daha Fazla Renk araç ipucu" + }, + "thickStrokeTooltip": { + "message": "Kalın Hat", + "description": "Kalın Hat araç ipucu" + }, + "mediumStrokeTooltip": { + "message": "Orta Kalınlıkta Hat", + "description": "Orta Kalınlıkta Hat araç ipucu" + }, + "thinStrokeTooltip": { + "message": "İnce Hat", + "description": "İnce Hat araç ipucu" + }, + "togglePictureinPictureModeTooltip": { + "message": "Resim İçinde Resim Modunu Aç/Kapat", + "description": "Resim İçinde Resim Modunu Aç/Kapat araç ipucu" + }, + "toggleFillTooltip": { + "message": "Dolgu Seçeneğini Aç/Kapat", + "description": "Dolgu Seçeneğini Aç/Kapat araç ipucu" + }, + "drawingModeToast": { + "message": "Çizim Modu", + "description": "Çizim Modu bilgilendirme penceresi" + }, + "blurModeToast": { + "message": "Bulanıklaştırma Modu", + "description": "Bulanıklaştırma Modu bilgilendirme penceresi" + }, + "clearBlurredElementsTooltip": { + "message": "Tüm bulanık öğeleri temizle", + "description": "Tüm bulanık öğeleri açıklama" + }, + "highlightClicksTooltip": { + "message": "Tıklamaları vurgula", + "description": "Tıklamaları vurgula açıklama" + }, + "highlightCursorTooltip": { + "message": "İmleci vurgula", + "description": "İmleci vurgula açıklama" + }, + "spotlightCursorTooltip": { + "message": "İmleci aydınlat", + "description": "İmleci aydınlat açıklama" + }, + "permissionsModalNoShowAgain": { + "message": "Tekrar gösterme", + "description": "İzinler penceresini kapat düğmesi" + }, + "restartModalTitle": { + "message": "Kaydı yeniden başlatmak istediğinizden emin misiniz?", + "description": "Yeniden başlatma modalı başlık" + }, + "restartModalDescription": { + "message": "Mevcut video ilerlemeniz kaybedilecektir.", + "description": "Yeniden başlatma modalı açıklama" + }, + "restartModalRestart": { + "message": "Kaydı yeniden başlat", + "description": "Yeniden başlatma modalı yeniden başlat düğmesi" + }, + "restartModalResume": { + "message": "Kayda devam et", + "description": "Yeniden başlatma modalı devam et düğmesi" + }, + "discardModalTitle": { + "message": "Kaydı silmek istediğinizden emin misiniz?", + "description": "Silme modalı başlık" + }, + "discardModalDescription": { + "message": "Mevcut video ilerlemeniz kaybedilecektir.", + "description": "Silme modalı açıklama" + }, + "discardModalDiscard": { + "message": "Kaydı sil", + "description": "Silme modalı sil düğmesi" + }, + "discardModalResume": { + "message": "Kayda devam et", + "description": "Silme modalı devam et düğmesi" + }, + "recorderSelectTitle": { + "message": "Ne kaydetmek istediğinizi seçin", + "description": "Kayıt sayfasındaki başlık" + }, + "recorderSelectProgressTitle": { + "message": "Kaydediliyor...", + "description": "Kayıt sayfasındaki kaydediliyor başlığı" + }, + "recorderSelectDescription": { + "message": "Bu sekme açık kalmalıdır. Kaydınız kaydedildikten sonra kapanacaktır.", + "description": "Kayıt sayfasındaki açıklama" + }, + "sandboxProgressTitle": { + "message": "Kayıt hazırlanıyor...", + "description": "Kum havuzu sayfasındaki başlık (kayıt / kaydediliyor)" + }, + "sandboxProgressDescription": { + "message": "Bu sekme açık kalmalıdır. Kaydınız hazır olduğunda güncellenecektir.", + "description": "Kum havuzu sayfasındaki açıklama (kayıt / kaydediliyor)" + }, + "sandboxEditorMainTitle": { + "message": "Editör", + "description": "Kum havuzu editör sayfasındaki başlık" + }, + "sandboxEditorCancelButton": { + "message": "İptal", + "description": "Kum havuzu editör sayfasındaki İptal düğmesi" + }, + "sandboxEditorRevertButton": { + "message": "Orijinaline geri dön", + "description": "Kum havuzu editör sayfasındaki Geri Dön düğmesi" + }, + "sandboxEditorResetButton": { + "message": "Sıfırla", + "description": "Kum havuzu editör sayfasındaki Sıfırla düğmesi" + }, + "sandboxEditorSaveButton": { + "message": "Değişiklikleri kaydet", + "description": "Kum havuzu editör sayfasındaki Kaydet düğmesi" + }, + "sandboxEditorSaveProgressButton": { + "message": "Kaydediliyor...", + "description": "Kum havuzu editör sayfasındaki Kaydet düğmesi (kaydediliyor)" + }, + "sandboxAudioDragAndDrop": { + "message": "Ses dosyanızı sürükleyip bırakın", + "description": "Kum havuzu editör sayfasındaki ses dosyasını sürükleyip bırakın" + }, + "sandboxAudioOrBrowse": { + "message": "Veya taramak için tıklayın", + "description": "Kum havuzu editör sayfasındaki ses dosyasını taramak için tıklayın" + }, + "sandboxAudioSettingsTitle": { + "message": "Ayarlar", + "description": "Kum havuzu editör sayfasındaki ses ayarları başlığı" + }, + "sandboxAudioVolumeLabel": { + "message": "Ses Seviyesi", + "description": "Kum havuzu editör sayfasındaki ses seviyesi etiketi" + }, + "sandboxAudioUpdateButton": { + "message": "Güncelle", + "description": "Kum havuzu editör sayfasındaki sesi güncelle düğmesi" + }, + "sandboxCropTitle": { + "message": "Kırp", + "description": "Kum havuzu editör sayfasındaki kırpma başlığı" + }, + "widthLabel": { + "message": "Genişlik", + "description": "Özellikler için Genişlik etiketi" + }, + "heightLabel": { + "message": "Yükseklik", + "description": "Özellikler için Yükseklik etiketi" + }, + "leftLabel": { + "message": "Sol", + "description": "Özellikler için Sol etiketi" + }, + "topLabel": { + "message": "Üst", + "description": "Özellikler için Üst etiketi" + }, + "sandboxEditorTrimInfo": { + "message": "Kolları sürükleyin ve seçilen bölümü düzenlemek için soldaki düğmeleri kullanın.", + "description": "Kum havuzlu editörde kesme hakkında bilgi" + }, + "sandboxEditorTrimButton": { + "message": "Videoyu Kırp", + "description": "Kum havuzlu editörde kırpma düğmesi" + }, + "sandboxEditorTrimProgressButton": { + "message": "Kırpılıyor...", + "description": "Kum havuzlu editörde kesme sırasında kırpma düğmesi" + }, + "sandboxEditorCutButton": { + "message": "Bölümü Kes", + "description": "Kum havuzlu editörde kesme düğmesi" + }, + "sandboxEditorCutProgressButton": { + "message": "Kesiliyor...", + "description": "Kum havuzlu editörde kesme sırasında kesme düğmesi" + }, + "sandboxEditorMuteButton": { + "message": "Sesi Kapat", + "description": "Kum havuzlu editörde sesi kapatma düğmesi" + }, + "sandboxEditorMuteProgressButton": { + "message": "Susturuluyor...", + "description": "Kum havuzlu editörde sesi sustururken sesi kapatma düğmesi" + }, + "learnMoreDot": { + "message": "Daha Fazla Bilgi", + "description": "Nokta ile daha fazla bilgi" + }, + "undoLabel": { + "message": "Geri Al", + "description": "Geri Al etiketi" + }, + "redoLabel": { + "message": "Yinele", + "description": "Yinele etiketi" + }, + "leaveReview": { + "message": "İnceleme yazın", + "description": "İnceleme bırakma düğmesi" + }, + "followForUpdates": { + "message": "Güncellemeleri Takip Edin", + "description": "Güncellemeleri takip etme düğmesi" + }, + "offlineLabelTitle": { + "message": "Şu anda çevrimdışısınız", + "description": "Çevrimdışı etiketi" + }, + "offlineLabelDescription": { + "message": "Bağlantınız yeniden sağlanana kadar bazı özellikler kullanılamaz", + "description": "Çevrimdışı etiketi açıklaması" + }, + "offlineLabelTryAgain": { + "message": "Yeniden Deneyin", + "description": "Çevrimdışı etiketi tekrar deneme düğmesi" + }, + "updateChromeLabelTitle": { + "message": "Chrome güncellenmesi gerekiyor", + "description": "Chrome güncelleme etiketi" + }, + "updateChromeLabelDescription": { + "message": "Daha fazla özelliğe erişmek için güncelleyin", + "description": "Chrome güncelleme açıklaması" + }, + "learnMoreLabel": { + "message": "Daha Fazla Bilgi", + "description": "Daha fazla bilgi düğmesi" + }, + "overLimitLabelTitle": { + "message": "Video yerel olarak işlemek için çok uzun", + "description": "Editörde 5 dakikadan fazla sınır etiketi" + }, + "overLimitLabelDescription": { + "message": "Düzenleme ve MP4 biçiminde dışa aktarma mevcut değil", + "description": "Editörde 5 dakikadan fazla sınır açıklaması" + }, + "videoProcessingLabelTitle": { + "message": "Video işleniyor...", + "description": "Editörde video işleme etiketi" + }, + "videoProcessingLabelDescription": { + "message": "Daha hızlı düzenleme için yükseltme yapın", + "description": "Editörde video işleme açıklaması" + }, + "sandboxEditTitle": { + "message": "Düzenle", + "description": "Kum havuzlu editör sayfasındaki düzenleme başlığı" + }, + "noConnectionLabel": { + "message": "Bağlantı Yok", + "description": "Bağlantı yok etiketi" + }, + "notAvailableLabel": { + "message": "Kullanılamıyor", + "description": "Kullanılamıyor etiketi" + }, + "editButtonTitle": { + "message": "Videoyu Düzenle", + "description": "Kırpma etiket düğmesi" + }, + "editButtonDescription": { + "message": "Videoyu kırp, kes veya sustur", + "description": "Kırpma etiketi" + }, + "preparingLabel": { + "message": "Video hazırlanıyor, lütfen bekleyin...", + "description": "Hazırlanıyor etiketi" + }, + "cropButtonTitle": { + "message": "Kırp", + "description": "Kırpma düğmesi" + }, + "cropButtonDescription": { + "message": "Videoyu kırp ve yeniden boyutlandır", + "description": "Kırpma etiketi" + }, + "addAudioButtonTitle": { + "message": "Ses Ekle", + "description": "Ses ekleme düğmesi" + }, + "addAudioButtonDescription": { + "message": "Kendi sesinizi yükleyerek videoya ses ekleyin", + "description": "Ses ekleme etiketi" + }, + "sandboxSaveTitle": { + "message": "Kaydet", + "description": "Kum havuzlu editör sayfasındaki kaydetme başlığı" + }, + "signOutDriveLabel": { + "message": "Drive'dan Çıkış Yap", + "description": "Google Drive'dan çıkış yapma etiketi" + }, + "savingDriveLabel": { + "message": "Kaydediliyor...", + "description": "Google Drive'a kaydetme etiketi" + }, + "saveDriveButtonTitle": { + "message": "Drive'a Kaydet", + "description": "Google Drive'a kaydetme düğmesi" + }, + "saveDriveButtonDescription": { + "message": "Mevcut sürümü Google Drive'a kaydedin", + "description": "Google Drive'a kaydetme etiketi" + }, + "signInDriveLabel": { + "message": "Oturum açın ve Drive'a kaydedin", + "description": "Google Drive'a oturum açma etiketi" + }, + "sandboxExportTitle": { + "message": "Dışa Aktar", + "description": "Kum havuzlu editör sayfasındaki dışa aktarma başlığı" + }, + "downloadingLabel": { + "message": "İndiriliyor...", + "description": "İndiriliyor etiketi" + }, + "downloadWEBMButtonTitle": { + "message": ".webm olarak İndir", + "description": "WEBM olarak İndir düğmesi" + }, + "downloadWEBMButtonDescription": { + "message": ".webm video olarak dışa aktar", + "description": "WEBM olarak İndir etiketi" + }, + "downloadMP4ButtonTitle": { + "message": ".mp4 olarak İndir", + "description": "MP4 olarak İndir düğmesi" + }, + "downloadMP4ButtonDescription": { + "message": ".mp4 video olarak dışa aktar (önerilen)", + "description": "MP4 olarak İndir etiketi" + }, + "downloadGIFButtonTitle": { + "message": ".gif olarak İndir", + "description": "GIF olarak İndir düğmesi" + }, + "downloadGIFButtonDescription": { + "message": "GIF olarak dışa aktar (maksimum 30 saniye)", + "description": "GIF olarak İndir etiketi" + }, + "shareModalSandboxTitle": { + "message": "Videolarınızı başkalarıyla paylaşın", + "description": "Kum havuzlu editör sayfasındaki paylaşım modalı başlığı" + }, + "shareModalSandboxDescription": { + "message": "Yakında geliyor! Paylaşım kullanılabilecek olduğunda güncel kalın ve bildirildiğinizde haberdar olmak için e-posta bırakın.", + "description": "Kum havuzlu editör sayfasındaki paylaşım modalı açıklaması" + }, + "shareModalSandboxButton": { + "message": "Bekleme listesine katılın", + "description": "Kum havuzlu editör sayfasındaki paylaşım modalı e-posta yer tutucusu" + }, + "shareSandboxButton": { + "message": "Videoyu Paylaş", + "description": "Kum havuzlu editör sayfasındaki paylaşma düğmesi" + }, + "replaceAudioEditor": { + "message": "Mevcut sesi değiştir", + "description": "Editörde sesi değiştirme düğmesi" + }, + "zoomToPointPopup": { + "message": "İşarete Yakınlaştır", + "description": "Noktaya yakınlaşma açılır penceresi" + }, + "stayInPagePopup": { + "message": "Kayıt yaparken sayfada kal", + "description": "Sayfa içinde kalma açılır penceresi" + }, + "micReminderPopup": { + "message": "Mikrofon kapalı uyarısı", + "description": "Mikrofon hatırlatma açılır penceresi" + }, + "helpPopup": { + "message": "Yardım", + "description": "Yardım açılır pencere düğmesi" + }, + "pausedRecordingToast": { + "message": "Kayıt durdu. Devam etmek için oynatma düğmesine basın.", + "description": "Durdurulan kayıt modal başlığı" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport ekranınızı kaydetme iznine sahip değil", + "description": "İzin modal başlığı" + }, + "chromePermissionsModalDescription": { + "message": "Ekran kaydını etkinleştirmek için, MyTechPassport'nin ekranınızı yakalamasına izin vermelisiniz.", + "description": "İzin modal açıklaması" + }, + "chromePermissionsModalAction": { + "message": "Ekran kaydını etkinleştir", + "description": "İzin modal düğmesi" + }, + "chromePermissionsModalCancel": { + "message": "İptal", + "description": "İzin modal iptal" + }, + "micMutedModalTitle": { + "message": "Mikrofonunuz kapalı", + "description": "Mikrofon kapalı modal başlığı" + }, + "micMutedModalDescription": { + "message": "Kaydınıza ses eklemek için mikrofonunuzu açmanız gerekecek. Sesi olmadan devam etmek istiyor musunuz?", + "description": "Mikrofon kapalı modal açıklaması" + }, + "micMutedModalAction": { + "message": "Evet, devam et", + "description": "Mikrofon kapalı modal devam et" + }, + "micMutedModalCancel": { + "message": "İptal", + "description": "Mikrofon kapalı modal iptal" + }, + "setupTitle": { + "message": "MyTechPassport ile üç basit adımda başlayın:", + "description": "Kurulum adımları başlığı" + }, + "setupStep1Before": { + "message": "1- ", + "description": "Kurulum adımı 1, ikonun önünde. Sonunda bir boşluk olmalı." + }, + "setupStep1After": { + "message": " uzantı ikonuna tıklayın", + "description": "Kurulum adımı 1, ikonun sonunda. Başında bir boşluk olmalı." + }, + "setupStep2Before": { + "message": "2- ", + "description": "Kurulum adımı 2, ikonun önünde. Sonunda bir boşluk olmalı." + }, + "setupStep2After": { + "message": " pin ikonuna basın", + "description": "Kurulum adımı 2, ikonun sonunda. Başında bir boşluk olmalı." + }, + "setupStep3Before": { + "message": "3- ", + "description": "Kurulum adımı 3, ikonun önünde. Sonunda bir boşluk olmalı." + }, + "setupStep3After": { + "message": " MyTechPassport ikonuna tıklayarak başlayın", + "description": "Kurulum adımı 3, ikonun sonunda. Başında bir boşluk olmalı." + }, + "setupCompleteTitle": { + "message": "Harika! Şimdi hazırsınız", + "description": "Kurulum tamamlandı başlığı" + }, + "setupCompleteDescription": { + "message": "Şimdi burada veya başka bir sekmede kayıt yapmaya başlayabilirsiniz.", + "description": "Kurulum tamamlandı açıklaması" + }, + "clickHereDrawOnboarding": { + "message": "Çizim yapmak için buraya tıklayın", + "description": "Buraya tıklama rehberi" + }, + "countdownMessage": { + "message": "Rahatlayın. Saymayı durdurmak için herhangi bir yere tıklayın.", + "description": "Gerisayım mesajı" + }, + "sandboxEditorTooSmallInfo": { + "message": "Çerçeve aralıkları nedeniyle kısa zaman aralıkları için düzenlemeler doğru olmayabilir.", + "description": "Editörün çok küçük olduğu hakkında bilgi" + }, + "processingBannerEditor": { + "message": "Video işleniyor, oynatma yanıltıcı veya kesilebilir.", + "description": "Editörde işleme bannerı" + }, + "croppingInfoTitle": { + "message": "Kırpma biraz zaman alabilir", + "description": "Kırpma bilgi başlığı" + }, + "croppingInfoDescription": { + "message": "Daha hızlı işlem için yükseltme yapın", + "description": "Kırpma bilgi açıklaması" + }, + "micOnToast": { + "message": "Mikrofon etkin", + "description": "Mikrofon etkinleştirildi bildirimi başlığı" + }, + "micOffToast": { + "message": "Mikrofon devre dışı", + "description": "Mikrofon devre dışı bırakıldı bildirimi başlığı" + }, + "hideUIAlerts": { + "message": "UI bildirimlerini gizle", + "description": "UI uyarılarını gizle düğmesi" + }, + "noShowAgain": { + "message": "Tekrar gösterme", + "description": "Tekrar gösterme düğmesi" + }, + "toolbarHoverOnly": { + "message": "Kullanılmadığında araç çubuğunu gizle", + "description": "Yalnızca üzerine gelindiğinde araç çubuğunu göster düğmesi" + }, + "stopRecording": { + "message": "Kaydı Durdur", + "description": "Kaydı Durdur düğmesi" + }, + "updateAnnouncementTitle": { + "message": "Yeni MyTechPassport'ye Hoş Geldiniz!", + "description": "Mevcut kullanıcılar için güncelleme duyurusu başlığı" + }, + "updateAnnouncementDescription": { + "message": "Yeni bir görünüm ve birçok heyecan verici özellik tanıtıyoruz, ama endişelenmeyin, hala bildiğiniz ve sevdiğiniz ücretsiz, özel ve açık kaynaklı uzantı aynı.", + "description": "Mevcut kullanıcılar için güncelleme duyurusu açıklaması" + }, + "updateAnnouncementLearnMore": { + "message": "Güncelleme hakkında daha fazla bilgi edinin.", + "description": "Mevcut kullanıcılar için güncelleme duyurusu daha fazla bilgi bağlantısı" + }, + "updateAnnouncementButton": { + "message": "Başlamak İçin", + "description": "Mevcut kullanıcılar için güncelleme duyurusu düğmesi" + }, + "streamErrorModalTitle": { + "message": "Kaydın başlatılmasında hata oluştu", + "description": "Akış hatası modal başlığı" + }, + "streamErrorModalDescription": { + "message": "Kaydın başlatılmasında bir hata oluştu gibi görünüyor. Tarayıcınızı yeniden başlatın ve tekrar deneyin. Sorun devam ederse, lütfen support@MyTechPassport.io adresinden bize ulaşın.", + "description": "Akış hatası modal açıklaması" + }, + "highestQuality": { + "message": "En Yüksek Kalite", + "description": "Açılır penceredeki en yüksek kalite etiketi" + }, + "restoreRecording": { + "message": "Son kaydı geri yükle", + "description": "Açılır penceredeki son kaydı geri yükle düğmesi" + }, + "havingIssuesButton": { + "message": "Sorun mu yaşıyorsunuz?", + "description": "Editörde sorunlar düğmesi" + }, + "havingIssuesModalTitle": { + "message": "Kaydınızı göremiyor musunuz?", + "description": "Editörde sorunlar modal başlığı" + }, + "havingIssuesModalDescription": { + "message": "Kaydınızı tamamladınız ve videonuzu görmeyen bir sayfadaysanız, mevcutsa ham video verilerini indirmeyi deneyebilirsiniz. Ayrıca bize ulaşabilir ve bir hata raporu gönderebilirsiniz.", + "description": "Editörde sorunlar modal açıklaması" + }, + "havingIssuesModalButton": { + "message": "Ham video verilerini indir", + "description": "Editörde sorunlar modal düğmesi" + }, + "havingIssuesModalButton2": { + "message": "Hata Bildir", + "description": "Editörde sorunlar modal düğme 2" + }, + "noRecordingFound": { + "message": "Kayıt bulunamadı, üzgünüz :(", + "description": "Editörde kayıt bulunamadı uyarısı" + }, + "memoryLimitTitle": { + "message": "Hafıza Sınırına Ulaşıldı", + "description": "Hafıza Sınırına Ulaşıldı Başlık" + }, + "memoryLimitDescription": { + "message": "Cihazınız, kayıt için kullanılabilir belleği tüketti ve kayıt otomatik olarak durdu. Daha uzun süre kayıt yapmak istiyorsanız video kalitesini düşürmeyi veya cihazınızdaki alanı temizlemeyi deneyebilirsiniz.", + "description": "Hafıza Sınırına Ulaşıldı Açıklama" + }, + "understoodButton": { + "message": "Anladım", + "description": "Anladım Düğmesi" + }, + "notEnoughSpaceTitle": { + "message": "Yetersiz Alan", + "description": "Yetersiz Alan Başlık" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassport, kayıt için en az 1 GB boş alan gerektirir. Lütfen cihazınızda alan açın ve yeniden deneyin.", + "description": "Yetersiz Alan Açıklama" + }, + "clearSpaceButton": { + "message": "Önceki Kayıtları Temizle", + "description": "Önceki Kayıtları Temizle Düğmesi" + }, + "sandboxAdvancedTitle": { + "message": "Gelişmiş", + "description": "Güvenli düzenleyici sayfasındaki Gelişmiş bölüm" + }, + "rawRecordingButtonTitle": { + "message": "Ham video dosyasını indir", + "description": "Ham kayıt düğmesi" + }, + "rawRecordingButtonDescription": { + "message": "Orijinal kayıt verilerini dışa aktar", + "description": "Ham kayıt etiketi" + }, + "troubleshootButtonTitle": { + "message": "Kaydınızla ilgili yardım alın", + "description": "Sorun giderme düğmesi" + }, + "troubleShootButtonDescription": { + "message": "Videoyu kurtarın ve diğer sorunları çözün", + "description": "Sorun giderme etiketi" + }, + "rawRecordingModalTitle": { + "message": "Ham video dosyasını indir", + "description": "Ham kayıt modal başlığı" + }, + "rawRecordingModalDescription": { + "message": "Ham video dosyası, MyTechPassport tarafından kaydedilen orijinal video dosyasıdır. Bu video işlenmemiş veya düzenlenmemiş olduğundan çok büyük olabilir ve tüm cihazlarda oynatılamayabilir. İşlenmiş video ile sorun yaşıyorsanız, bu dosyayı videoyu kurtarmak için kullanabilirsiniz.", + "description": "Ham kayıt modal açıklaması" + }, + "rawRecordingModalButton": { + "message": "İndir", + "description": "Ham kayıt modal düğmesi" + }, + "troubleshootModalTitle": { + "message": "Sistem bilgisi ve video verilerini indirip sorun giderme için gönderin", + "description": "Sorun giderme modal başlığı" + }, + "troubleshootModalDescription": { + "message": "İndirdikten sonra dosyayı support@MyTechPassport.io adresine gönderin ve ilgili bilgileri ekleyin. Bu verileri, uzantı ile ilgili yaşadığınız sorunları çözmek ve mümkünse videonuzu kurtarmak için kullanacağız.", + "description": "Sorun giderme modal açıklaması" + }, + "troubleshootModalButton": { + "message": "İndir", + "description": "Sorun giderme modal düğmesi" + }, + "overLimitModalTitle": { + "message": "Videonuz cihazınızda işlemek için çok uzun", + "description": "5 dakika sınırlı modal başlığı" + }, + "overLimitModalDescription": { + "message": "MyTechPassport tamamen özel ve yerel olarak çalıştığı için cihazınızın donanımıyla sınırlıdır. Bu uzunluktaki bir videoyu işlemek çok uzun sürer ve çok fazla kaynak kullanır. Ancak, hala WEBM dosyasını veya ham kaydı indirebilirsiniz, ancak düzenleme ve MP4 dışa aktarma seçenekleri mevcut değildir. Yine de riskleri anlıyorsanız, videoyu işlemeyi deneyebilirsiniz.", + "description": "5 dakika sınırlı modal açıklaması" + }, + "overLimitModalButton": { + "message": "Riski anladım, yine de dene", + "description": "5 dakika sınırlı modal düğmesi" + }, + "overLimitModalLearnMore": { + "message": "Uzun videoları işleme hakkında daha fazla bilgi edinin.", + "description": "5 dakika sınırlı modal daha fazla bilgi öğrenme bağlantısı" + }, + + "recoveryModeTitle": { + "message": "Kurtarma Modu", + "description": "Kurtarma Modu Başlığı" + }, + + "downloadForTroubleshootingOption": { + "message": "Sorunları Gidermek için Verileri İndir", + "description": "Sorunları Giderme Seçeneği" + }, + "getHelpNav": { + "message": "Yardım Merkezi", + "description": "Yardım Navigasyon Öğesi" + }, + "audioWarningTitle": { + "message": "Sayfa Sesini Kaydet", + "description": "Ses Uyarı Başlığı" + }, + "audioWarningDescription": { + "message": "Bu sayfanın sesini kaydetmek için '$tab$' seçeneğini kullanmalısınız.", + "description": "Ses Uyarı Açıklaması", + "placeholders": { + "tab": { + "content": "$1", + "example": "Sekme Alanı" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Sayfada Desteklenmeyen Uzantı", + "description": "Sekme Üzerinde Desteklenmeyen Uzantı Başlığı" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport önceki sekmenizde desteklenmiyordu. Yine de burada kaydı başlatabilir ve ardından sekmeye geçebilirsiniz, ancak kamera ve araç çubuğunuz görünür olmayacaktır.", + "description": "Sekme Üzerinde Desteklenmeyen Uzantı Açıklaması" + }, + "backupsTitle": { + "message": "MyTechPassport Kayıtlarınız için Yerel Yedekleme Ayarları", + "description": "Yedeklemeler Başlığı" + }, + "backupsDescription1": { + "message": "Yaptığınız tüm kayıtların bir yedeğini alın. Yedeklemeleri yapılandırmazsanız, kayıtlarınızı indirmeye karar verdiğinizde yalnızca kaydedilecektir.", + "description": "Yedeklemeler Açıklaması" + }, + "backupsDescription2": { + "message": "İndirmeler veya diğer sistem klasörlerine kaydetmeye çalışıyorsanız, önce yeni bir klasör oluşturmanız gerekebilir.", + "description": "Yedeklemeler Açıklaması" + }, + "backupsSelectFolder": { + "message": "Klasör Seç", + "description": "Klasör Seçme Düğmesi" + }, + "backupsNotNow": { + "message": "Şimdi Değil", + "description": "Şimdi Değil Düğmesi" + }, + "backupsOnTitle": { + "message": "Kayıtlarınız Yerel Olarak Senkronize Ediliyor", + "description": "Etkin Yedeklemeler Başlığı" + }, + "backupsOnDescription": { + "message": "Her kayıt yaparken izin istemekten kaçınmak için bu sekme açık bırakmanızı öneririz.", + "description": "Etkin Yedeklemeler Açıklaması" + }, + "backupsClose": { + "message": "Yine de Sekmeyi Kapat", + "description": "Yine de Sekmeyi Kapat Düğmesi" + }, + "backupsStop": { + "message": "Tüm Kayıtların Yedeklemesini Durdur", + "description": "Yedeklemeleri Durdur Düğmesi" + }, + "backupsConfirmTitle": { + "message": "Lütfen MyTechPassport'in Yerel Yedekleme Klasörüne Erişimini Tekrar Onaylayın", + "description": "Yedeklemeler Onay Başlığı" + }, + "backupsConfirmDescription": { + "message": "Üzgünüz, ancak kayıtlarınızın yerel kopyalarını oluşturmaya devam etmek için tekrar izniniz gerekiyor. Maalesef, bu sekme kapandığında her seferinde sormamız gerekecek, bu da tarayıcıyı kapatmanız veya bilgisayarınızı yeniden başlatmanız durumunda olabilir.", + "description": "Yedeklemeler Onay Açıklaması" + }, + "backupsConfirmAllow": { + "message": "MyTechPassport'e Kayıtların Yedeklemesine Devam Etme İzni Ver", + "description": "Yedeklemeler Onayında İzin Ver Düğmesi" + }, + "backupsToggle": { + "message": "Kayıtların Yedeklerini Al", + "description": "Yedeklemeleri Değiştir Etiketi" + }, + "backupPermissionFailTitle": { + "message": "Kaydın Yedeklemesi İçin İzin Verilmedi", + "description": "Yedekleme İzin Reddi Başlığı" + }, + "backupPermissionFailDescription": { + "message": "Kayıtlarınızın yerel bir kopyası oluşturmak için bir klasör seçmediniz. Tarayıcınızın veya işletim sisteminizin sürümüne bağlı olarak, her kayıt yapmaya başladığınızda klasörü seçmeniz istenebilir. Tekrar deneyebilir veya izinleri tekrar vermek istemiyorsanız yedeklemeleri tamamen devre dışı bırakabilirsiniz.", + "description": "Yedekleme İzin Reddi Açıklaması" + }, + "recordAudioWarningMacTitle": { + "message": "Bilgisayar Sesini Kaydet", + "description": "macOS İçin Ses Uyarı Başlığı" + }, + "recordAudioWarningMacDescription": { + "message": "macOS'ta yalnızca sekmelerden ses kaydedebilirsiniz. 'Chrome Sekmesi' seçeneğini seçin ve 'Ses Sekmesiyle de paylaş' seçeneğinin etkin olduğundan emin olun.", + "description": "macOS İçin Ses Uyarı Açıklaması" + }, + "recordAudioWarningOtherTitle": { + "message": "Bilgisayar Sesini Kaydet", + "description": "Diğer Sistemler İçin Ses Uyarı Başlığı" + }, + "recordAudioWarningOtherDescription": { + "message": "Bilgisayar sesini kaydetmek istiyorsanız, 'Sistem Sesini Paylaş' seçeneğinin etkin olduğundan emin olun. Bu seçeneği görmüyorsanız, Chrome'u güncellemeyi deneyin veya sekme kaydı seçeneğine geçin.", + "description": "Diğer Sistemler İçin Ses Uyarı Açıklaması" + }, + + "maxResolutionLabel": { + "message": "Maksimum çözünürlük", + "description": "Ayarlar menüsündeki maksimum çözünürlük etiketi" + }, + "maxFPSLabel": { + "message": "Maksimum FPS", + "description": "Ayarlar menüsündeki maksimum FPS etiketi" + }, + + "notEnoughRAM": { + "message": "Yetersiz RAM", + "description": "Ayarlar menüsünde yetersiz RAM etiketi" + }, + "resizeWindowLabel": { + "message": "Pencereyi Yeniden Boyutlandır", + "description": "Ayarlar menüsündeki pencere boyutlandırma etiketi" + }, + "screenTooSmallTooltip": { + "message": "Bu çözünürlüğe pencereyi yeniden boyutlandırmak için ekran çok küçük", + "description": "Ayarlar menüsündeki ekran çok küçük bilgi baloncuğu" + }, + "maxResolutionTooltip": { + "message": "Bu çözünürlükte kayıt yapmak cihazınızda mümkün değil", + "description": "Ayarlar menüsündeki maksimum çözünürlük bilgi baloncuğu" + }, + "permissionsModalReview": { + "message": "İzinleri İncele", + "description": "İzinleri İncele düğmesi" + } +} diff --git a/build/_locales/uk/messages.json b/build/_locales/uk/messages.json new file mode 100644 index 0000000..ce774e6 --- /dev/null +++ b/build/_locales/uk/messages.json @@ -0,0 +1,1039 @@ +{ + "extName": { + "message": "MyTechPassport - Запис екрану & Анотації", + "description": "Extension name" + }, + "extDesc": { + "message": "Найкращий безкоштовний відеореєстратор екрану без обмежень. Захоплення, анотація, збільшення, розмиття, редагування відео та багато іншого - без необхідності входу та з увагою до конфіденційності.", + "description": "Extension description" + }, + "recordTab": { + "message": "Запис", + "description": "Record tab label on popup" + }, + "videosTab": { + "message": "Ваші відео", + "description": "Videos tab label on popup" + }, + "screenType": { + "message": "Екран", + "description": "Screen recording type label on popup" + }, + "tabType": { + "message": "Область вкладки", + "description": "Tab area recording type label on popup" + }, + "cameraType": { + "message": "Камера", + "description": "Camera recording type label on popup" + }, + "mockupType": { + "message": "Макет", + "description": "Mockup recording type label on popup" + }, + "customAreaRecordingDisabledTitle": { + "message": "Запис області користувача вимкнено", + "description": "Custom area recording disabled warning on popup for Chrome version older than 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "Оновіть версію Chrome до 110+", + "description": "Custom area recording disabled warning description on popup for Chrome version older than 104" + }, + "customAreaRecordingDisabledAction": { + "message": "Оновити", + "description": "Custom area recording disabled warning action on popup for Chrome version older than 104" + }, + "permissionsModalTitle": { + "message": "Перевірте ваші дозволи", + "description": "Camera / microphone permissions warning modal title" + }, + "permissionsModalDescription": { + "message": "Схоже, що MyTechPassportsport не може отримати доступ до вашої камери або мікрофону. Обов'язково дозвольте доступ, натиснувши на значок камери у панелі адреси.", + "description": "Camera / microphone permissions warning modal description" + }, + "permissionsModalDismiss": { + "message": "Відхилити", + "description": "Camera / microphone permissions warning modal dismiss button" + }, + "allowCameraAccessButton": { + "message": "Дозволити доступ до камери", + "description": "Allow camera access button" + }, + "allowMicrophoneAccessButton": { + "message": "Дозволити доступ до мікрофону", + "description": "Allow microphone access button" + }, + "pushToTalkLabel": { + "message": "Натискайте, щоб говорити", + "description": "Push to talk switch label" + }, + "customAreaLabel": { + "message": "Встановіть область для запису", + "description": "Custom area switch label" + }, + "flipCameraLabel": { + "message": "Перевернути камеру", + "description": "Flip camera switch label" + }, + "backgroundEffectsLabel": { + "message": "Ефекти фону", + "description": "Background effects switch label" + }, + "recordButtonLabel": { + "message": "Почати запис", + "description": "Record button label" + }, + "recordButtonInProgressLabel": { + "message": "Початок запису...", + "description": "Record button in progress label" + }, + "recordButtonNoCameraLabel": { + "message": "Встановіть камеру для запису", + "description": "Record button label when in camera mode and no camera is selected" + }, + "showMoreOptionsLabel": { + "message": "Показати більше опцій", + "description": "Show more options label" + }, + + "systemAudioLabel": { + "message": "Включити системний звук", + "description": "Мітка системного аудіо/вкладка" + }, + "hideToolbarLabel": { + "message": "Приховати панель інструментів", + "description": "Hide toolbar label" + }, + "countdownLabel": { + "message": "Зворотний відлік", + "description": "Countdown label" + }, + "alarmLabel": { + "message": "Встановити обмеження за часом", + "description": "Alarm label" + }, + "blurTypeLabel": { + "message": "Розмиття", + "description": "Blur background label" + }, + "noneDropdownLabel": { + "message": "Немає", + "description": "No device selected" + }, + "noCameraDropdownLabel": { + "message": "Немає камери", + "description": "No camera selected" + }, + "noMicrophoneDropdownLabel": { + "message": "Немає мікрофону", + "description": "No microphone selected" + }, + "selectSourceDropdownPlaceholder": { + "message": "Виберіть джерело", + "description": "Select source placeholder" + }, + "offLabel": { + "message": "Вимкнено", + "description": "Off label on dropdown" + }, + "regionWidthLabel": { + "message": "Ширина", + "description": "Region width label" + }, + "regionHeightLabel": { + "message": "Висота", + "description": "Region height label" + }, + "addImageToastTitle": { + "message": "Клацніть, щоб вставити зображення", + "description": "Toast that shows when adding a new image" + }, + "finishRecordingTooltip": { + "message": "Завершити запис", + "description": "Finish recording tooltip" + }, + "restartRecordingTooltip": { + "message": "Почати запис знову", + "description": "Restart recording tooltip" + }, + "pauseRecordingTooltip": { + "message": "Призупинити запис", + "description": "Pause recording tooltip" + }, + "resumeRecordingTooltip": { + "message": "Продовжити запис", + "description": "Resume recording tooltip" + }, + "cancelRecordingTooltip": { + "message": "Скасувати запис", + "description": "Cancel recording tooltip" + }, + "toggleDrawingToolsTooltip": { + "message": "Перемкнути малювальні інструменти", + "description": "Toggle drawing tools tooltip" + }, + "toggleBlurToolTooltip": { + "message": "Перемкнути інструмент розмиття", + "description": "Toggle blur tools tooltip" + }, + "toggleCursorOptionsTooltip": { + "message": "Перемкнути параметри курсора", + "description": "Toggle cursor options tooltip" + }, + "disableCameraTooltip": { + "message": "Вимкнути камеру", + "description": "Disable camera tooltip" + }, + "enableCameraTooltip": { + "message": "Увімкнути камеру", + "description": "Enable camera tooltip" + }, + "noCameraPermissionsTooltip": { + "message": "Відсутні дозволи на камеру", + "description": "No camera permissions tooltip" + }, + "disableMicrophoneTooltip": { + "message": "Вимкнути мікрофон", + "description": "Disable microphone tooltip" + }, + "enableMicrophoneTooltip": { + "message": "Увімкнути мікрофон", + "description": "Enable microphone tooltip" + }, + "noMicrophonePermissionsTooltip": { + "message": "Відсутні дозволи на мікрофон", + "description": "No microphone permissions tooltip" + }, + "selectToolTooltip": { + "message": "Вибрати інструмент", + "description": "Select tool tooltip" + }, + "penToolTooltip": { + "message": "Інструмент ручки", + "description": "Pen tool tooltip" + }, + "highlighterToolTooltip": { + "message": "Інструмент маркера", + "description": "Highlighter tool tooltip" + }, + "eraserToolTooltip": { + "message": "Інструмент гумки", + "description": "Eraser tool tooltip" + }, + "textToolTooltip": { + "message": "Текстовий інструмент", + "description": "Text tool tooltip" + }, + "shapeToolTooltip": { + "message": "Фігурний інструмент", + "description": "Shape tool tooltip" + }, + "arrowToolTooltip": { + "message": "Інструмент стрілки", + "description": "Arrow tool tooltip" + }, + "imageToolTooltip": { + "message": "Інструмент зображення", + "description": "Image tool tooltip" + }, + "undoTooltip": { + "message": "Скасувати", + "description": "Undo tooltip" + }, + "redoTooltip": { + "message": "Повторити", + "description": "Redo tooltip" + }, + "clearCanvasTooltip": { + "message": "Очистити полотно", + "description": "Clear canvas tooltip" + }, + "moreColorsTooltip": { + "message": "Більше кольорів", + "description": "More colors tooltip" + }, + "thickStrokeTooltip": { + "message": "Товста обводка", + "description": "Thick stroke tooltip" + }, + "mediumStrokeTooltip": { + "message": "Середня обводка", + "description": "Medium stroke tooltip" + }, + "thinStrokeTooltip": { + "message": "Тонка обводка", + "description": "Thin stroke tooltip" + }, + "togglePictureinPictureModeTooltip": { + "message": "Перемкнути режим picture-in-picture", + "description": "Toggle picture-in-picture mode tooltip" + }, + "toggleFillTooltip": { + "message": "Перемкнути заливку", + "description": "Toggle fill tooltip" + }, + "drawingModeToast": { + "message": "Режим малювання", + "description": "Drawing mode toast" + }, + "blurModeToast": { + "message": "Режим розмиття", + "description": "Blur mode toast" + }, + "clearBlurredElementsTooltip": { + "message": "Очистити всі розмиті елементи", + "description": "Clear all blurred elements tooltip" + }, + "highlightClicksTooltip": { + "message": "Підсвічувати кліки", + "description": "Highlight clicks tooltip" + }, + "highlightCursorTooltip": { + "message": "Підсвічувати курсор", + "description": "Highlight cursor tooltip" + }, + "spotlightCursorTooltip": { + "message": "Спрямовувати прожектор на курсор", + "description": "Spotlight cursor tooltip" + }, + "permissionsModalNoShowAgain": { + "message": "Не показувати знову", + "description": "Permissions modal dismiss button" + }, + "restartModalTitle": { + "message": "Ви впевнені, що хочете перезапустити запис?", + "description": "Restart recording modal title" + }, + "restartModalDescription": { + "message": "Ваш поточний відеопрогрес буде втрачено.", + "description": "Restart recording modal description" + }, + "restartModalRestart": { + "message": "Перезапустити запис", + "description": "Restart recording modal restart button" + }, + "restartModalResume": { + "message": "Продовжити запис", + "description": "Restart recording modal resume button" + }, + "discardModalTitle": { + "message": "Ви впевнені, що хочете відхилити запис?", + "description": "Discard recording modal title" + }, + "discardModalDescription": { + "message": "Ваш поточний відеопрогрес буде втрачено.", + "description": "Discard recording modal description" + }, + "discardModalDiscard": { + "message": "Відхилити запис", + "description": "Discard recording modal discard button" + }, + "discardModalResume": { + "message": "Продовжити запис", + "description": "Discard recording modal resume button" + }, + "recorderSelectTitle": { + "message": "Виберіть, що ви хочете записати", + "description": "Title in recording page" + }, + "recorderSelectProgressTitle": { + "message": "Запис...", + "description": "Title in recording page while recording" + }, + "recorderSelectDescription": { + "message": "Залиште цю вкладку відкритою. Вона закриється, як тільки ваш запис буде збережено.", + "description": "Description in recording page" + }, + "sandboxProgressTitle": { + "message": "Підготовка до запису...", + "description": "Title in sandbox page while recording / saving" + }, + "sandboxProgressDescription": { + "message": "Залиште цю вкладку відкритою. Вона оновиться з вашим записом, коли він буде готовий.", + "description": "Description in sandbox page while recording / saving" + }, + "sandboxEditorMainTitle": { + "message": "Редактор", + "description": "Title in navigation of the sandbox editor page" + }, + "sandboxEditorCancelButton": { + "message": "Скасувати", + "description": "Cancel button in sandbox editor page" + }, + "sandboxEditorRevertButton": { + "message": "Скасувати зміни", + "description": "Revert button in sandbox editor page" + }, + "sandboxEditorResetButton": { + "message": "Скинути", + "description": "Reset button in sandbox editor page" + }, + "sandboxEditorSaveButton": { + "message": "Зберегти зміни", + "description": "Save button in sandbox editor page" + }, + "sandboxEditorSaveProgressButton": { + "message": "Збереження...", + "description": "Save button in sandbox editor page while saving" + }, + "sandboxAudioDragAndDrop": { + "message": "Перетягніть ваш аудіофайл", + "description": "Drag and drop audio file in sandbox editor page" + }, + "sandboxAudioOrBrowse": { + "message": "Або натисніть, щоб переглянути", + "description": "Or click to browse audio file in sandbox editor page" + }, + "sandboxAudioSettingsTitle": { + "message": "Налаштування", + "description": "Audio settings title in sandbox editor page" + }, + "sandboxAudioVolumeLabel": { + "message": "Гучність", + "description": "Audio volume label in sandbox editor page" + }, + "sandboxAudioUpdateButton": { + "message": "Оновити", + "description": "Update audio button in sandbox editor page" + }, + "sandboxCropTitle": { + "message": "Обрізати", + "description": "Crop title in sandbox editor page" + }, + "widthLabel": { + "message": "Ширина", + "description": "Width label for properties" + }, + "heightLabel": { + "message": "Висота", + "description": "Height label for properties" + }, + "leftLabel": { + "message": "Зліва", + "description": "Left label for properties" + }, + "topLabel": { + "message": "Зверху", + "description": "Top label for properties" + }, + "sandboxEditorTrimInfo": { + "message": "Перетягніть ручки та використовуйте кнопки ліворуч для редагування вибраного розділу.", + "description": "Info about trimming in sandbox editor" + }, + "sandboxEditorTrimButton": { + "message": "Обрізати відео", + "description": "Trim button in sandbox editor" + }, + "sandboxEditorTrimProgressButton": { + "message": "Обрізання...", + "description": "Trim button in sandbox editor while trimming" + }, + "sandboxEditorCutButton": { + "message": "Вирізати секцію", + "description": "Cut button in sandbox editor" + }, + "sandboxEditorCutProgressButton": { + "message": "Вирізання...", + "description": "Cut button in sandbox editor while cutting" + }, + "sandboxEditorMuteButton": { + "message": "Вимкнути звук", + "description": "Mute button in sandbox editor" + }, + "sandboxEditorMuteProgressButton": { + "message": "Вимкнення...", + "description": "Mute button in sandbox editor while muting" + }, + "learnMoreDot": { + "message": "Дізнайтеся більше.", + "description": "Learn more with a dot" + }, + "undoLabel": { + "message": "Скасувати", + "description": "Undo label" + }, + "redoLabel": { + "message": "Повторити", + "description": "Redo label" + }, + "leaveReview": { + "message": "Залиште відгук", + "description": "Leave a review button" + }, + "followForUpdates": { + "message": "Слідкуйте за оновленнями", + "description": "Follow for updates button" + }, + "offlineLabelTitle": { + "message": "Ви зараз в автономному режимі", + "description": "Offline label" + }, + "offlineLabelDescription": { + "message": "Деякі функції недоступні до повторного підключення", + "description": "Offline label description" + }, + "offlineLabelTryAgain": { + "message": "Спробуйте знову", + "description": "Offline label try again button" + }, + "updateChromeLabelTitle": { + "message": "Необхідне оновлення Chrome", + "description": "Update Chrome label" + }, + "updateChromeLabelDescription": { + "message": "Оновлення для отримання доступу до більше функцій", + "description": "Update Chrome label description" + }, + "learnMoreLabel": { + "message": "Дізнатися більше", + "description": "Learn more button" + }, + "overLimitLabelTitle": { + "message": "Відео занадто довге для обробки локально", + "description": "Мітка обмеження понад 5 хвилин у редакторі" + }, + "overLimitLabelDescription": { + "message": "Редагування та експорт у форматі MP4 недоступні", + "description": "Опис обмеження понад 5 хвилин у редакторі" + }, + "videoProcessingLabelTitle": { + "message": "Відео обробляється...", + "description": "Video processing label in editor" + }, + "videoProcessingLabelDescription": { + "message": "Оновлення для швидшого редагування", + "description": "Video processing description in editor" + }, + "sandboxEditTitle": { + "message": "Редагувати", + "description": "Edit title in sandbox editor page" + }, + "noConnectionLabel": { + "message": "Немає з'єднання", + "description": "No connection label" + }, + "notAvailableLabel": { + "message": "Недоступно", + "description": "Not available label" + }, + "editButtonTitle": { + "message": "Редагувати відео", + "description": "Trim label button" + }, + "editButtonDescription": { + "message": "Обрізати, вирізати або вимкнути звук у відео", + "description": "Trim label" + }, + "preparingLabel": { + "message": "Підготовка відео, зачекайте, будь ласка...", + "description": "Preparing label" + }, + "cropButtonTitle": { + "message": "Обрізати", + "description": "Crop label button" + }, + "cropButtonDescription": { + "message": "Обрізати та змінити розмір відео", + "description": "Crop label" + }, + "addAudioButtonTitle": { + "message": "Додати аудіо", + "description": "Add audio label button" + }, + "addAudioButtonDescription": { + "message": "Завантажте своє аудіо для додавання до відео", + "description": "Add audio label" + }, + "sandboxSaveTitle": { + "message": "Зберегти", + "description": "Save title in sandbox editor page" + }, + "signOutDriveLabel": { + "message": "Вийти з Диска", + "description": "Sign out of Google Drive label" + }, + "savingDriveLabel": { + "message": "Збереження...", + "description": "Saving to Google Drive label" + }, + "saveDriveButtonTitle": { + "message": "Зберегти на Диск", + "description": "Save to Google Drive button" + }, + "saveDriveButtonDescription": { + "message": "Зберегти поточну версію на Диск Google", + "description": "Save to Google Drive label" + }, + "signInDriveLabel": { + "message": "Увійти та зберегти на Диск", + "description": "Sign in to Google Drive label" + }, + "sandboxExportTitle": { + "message": "Експорт", + "description": "Export title in sandbox editor page" + }, + "downloadingLabel": { + "message": "Завантаження...", + "description": "Downloading label" + }, + "downloadWEBMButtonTitle": { + "message": "Завантажити як .webm", + "description": "Download WEBM button" + }, + "downloadWEBMButtonDescription": { + "message": "Експорт відео у форматі .webm", + "description": "Download WEBM label" + }, + "downloadMP4ButtonTitle": { + "message": "Завантажити як .mp4", + "description": "Download MP4 button" + }, + "downloadMP4ButtonDescription": { + "message": "Експорт відео у форматі .mp4 (рекомендовано)", + "description": "Download MP4 label" + }, + "downloadGIFButtonTitle": { + "message": "Завантажити як .gif", + "description": "Download GIF button" + }, + "downloadGIFButtonDescription": { + "message": "Експорт у форматі GIF (максимум 30 секунд)", + "description": "Download GIF label" + }, + "shareModalSandboxTitle": { + "message": "Поділіться своїми відео з іншими", + "description": "Share modal title in sandbox editor page" + }, + "shareModalSandboxDescription": { + "message": "Скоро! Залиште свою електронну адресу, щоб бути в курсі та отримувати сповіщення, коли буде доступно обмін", + "description": "Share modal description in sandbox editor page" + }, + "shareModalSandboxButton": { + "message": "Приєднуйтесь до списку очікування", + "description": "Share modal email placeholder in sandbox editor page" + }, + "shareSandboxButton": { + "message": "Поділитися відео", + "description": "Share button in sandbox editor page" + }, + "replaceAudioEditor": { + "message": "Замінити існуюче аудіо", + "description": "Replace audio button in editor" + }, + "zoomToPointPopup": { + "message": "Збільшити до курсору", + "description": "Zoom to point popup" + }, + "stayInPagePopup": { + "message": "Залишайтеся на сторінці під час запису", + "description": "Stay in page popup" + }, + "micReminderPopup": { + "message": "Попередження про вимкнений мікрофон", + "description": "Mic reminder popup" + }, + "helpPopup": { + "message": "Довідка", + "description": "Help popup button" + }, + "pausedRecordingToast": { + "message": "Запис призупинено. Натисніть кнопку відтворення для продовження.", + "description": "Paused recording modal title" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport не має дозволу на запис вашого екрану", + "description": "Permission modal title" + }, + "chromePermissionsModalDescription": { + "message": "Щоб увімкнути запис екрану, вам слід дозволити MyTechPassport захоплювати ваш екран, коли це буде запитано.", + "description": "Permission modal description" + }, + "chromePermissionsModalAction": { + "message": "Увімкнути запис екрану", + "description": "Permission modal action" + }, + "chromePermissionsModalCancel": { + "message": "Скасувати", + "description": "Permission modal cancel" + }, + "micMutedModalTitle": { + "message": "Ваш мікрофон вимкнено", + "description": "Microphone muted modal title" + }, + "micMutedModalDescription": { + "message": "Для включення звуку у вашому записі слід розблокувати мікрофон. Бажаєте продовжити без звуку?", + "description": "Microphone muted modal description" + }, + "micMutedModalAction": { + "message": "Так, продовжити", + "description": "Microphone muted modal continue" + }, + "micMutedModalCancel": { + "message": "Скасувати", + "description": "Microphone muted modal cancel" + }, + "setupTitle": { + "message": "Почніть використовувати MyTechPassport за три простих кроки:", + "description": "Set up steps title" + }, + "setupStep1Before": { + "message": "1- Натисніть ", + "description": "Set up step 1, before the icon. It needs a space at the end." + }, + "setupStep1After": { + "message": " значок розширення", + "description": "Set up step 1, after the icon. It needs a space at the beginning." + }, + "setupStep2Before": { + "message": "2- Натисніть ", + "description": "Set up step 2, before the icon. It needs a space at the end." + }, + "setupStep2After": { + "message": " значок закріплення", + "description": "Set up step 2, after the icon. It needs a space at the beginning." + }, + "setupStep3Before": { + "message": "3- Клацніть на ", + "description": "Set up step 3, before the icon. It needs a space at the end." + }, + "setupStep3After": { + "message": " значок MyTechPassportsportsport, щоб розпочати", + "description": "Set up step 3, after the icon. It needs a space at the beginning." + }, + "setupCompleteTitle": { + "message": "Чудово! Ви готові", + "description": "Set up complete title" + }, + "setupCompleteDescription": { + "message": "Тепер ви можете почати запис тут або в іншій вкладці.", + "description": "Set up complete description" + }, + "clickHereDrawOnboarding": { + "message": "Клацніть тут, щоб малювати", + "description": "Click here onboarding" + }, + "countdownMessage": { + "message": "Розслабтеся. Клацніть будь-де, щоб зупинити відлік.", + "description": "Countdown message" + }, + "sandboxEditorTooSmallInfo": { + "message": "Редагування може бути неточними для коротких проміжків часу через інтервали між кадрами.", + "description": "Info about the editor being too small" + }, + "processingBannerEditor": { + "message": "Відео обробляється, відтворення може бути неточним або перерваним.", + "description": "Processing banner in editor" + }, + "croppingInfoTitle": { + "message": "Обрізка може зайняти деякий час", + "description": "Cropping info title" + }, + "croppingInfoDescription": { + "message": "Оновіть для швидшої обробки", + "description": "Cropping info description" + }, + "micOnToast": { + "message": "Мікрофон увімкнено", + "description": "Microphone enabled toast title" + }, + "micOffToast": { + "message": "Мікрофон вимкнено", + "description": "Microphone disabled toast title" + }, + "hideUIAlerts": { + "message": "Приховати сповіщення інтерфейсу", + "description": "Hide UI alerts button" + }, + "noShowAgain": { + "message": "Не показувати знову", + "description": "Don't show again button" + }, + "toolbarHoverOnly": { + "message": "Приховати панель інструментів при неактивності", + "description": "Only show toolbar on hover button" + }, + "stopRecording": { + "message": "Зупинити запис", + "description": "Stop recording button in recording screen" + }, + "updateAnnouncementTitle": { + "message": "Ласкаво просимо до нового MyTechPassport!", + "description": "Заголовок оголошення про оновлення для існуючих користувачів" + }, + "updateAnnouncementDescription": { + "message": "Ми представляємо новий вигляд та багато цікавих функцій, але не хвилюйтеся, це все ще та сама безкоштовна, конфіденційна та відкрита розширення, яке ви знаєте і любите.", + "description": "Опис оголошення про оновлення для існуючих користувачів" + }, + "updateAnnouncementLearnMore": { + "message": "Дізнайтеся більше про оновлення.", + "description": "Посилання 'Дізнатися більше' для оголошення про оновлення для існуючих користувачів" + }, + "updateAnnouncementButton": { + "message": "Почати", + "description": "Кнопка оголошення про оновлення для існуючих користувачів" + }, + "streamErrorModalTitle": { + "message": "Помилка при запуску запису", + "description": "Заголовок модального вікна помилки потоку" + }, + "streamErrorModalDescription": { + "message": "Схоже, що виникла помилка при запуску запису. Перезапустіть свій браузер і спробуйте ще раз. Якщо проблема не зникає, будь ласка, зв'яжіться з нами за адресою support@MyTechPassport.io.", + "description": "Опис модального вікна помилки потоку" + }, + "highestQuality": { + "message": "Найвища якість", + "description": "Позначка перемикача найвищої якості в спливаючому вікні" + }, + "restoreRecording": { + "message": "Відновити останнє запис", + "description": "Кнопка відновлення останнього запису в спливаючому вікні" + }, + "havingIssuesButton": { + "message": "Виникли проблеми?", + "description": "Кнопка проблем в редакторі" + }, + "havingIssuesModalTitle": { + "message": "Не бачите свого запису?", + "description": "Заголовок модального вікна проблем в редакторі" + }, + "havingIssuesModalDescription": { + "message": "Якщо ви завершили запис і опинилися на цій сторінці без можливості переглянути своє відео, ви можете спробувати завантажити сиру відеоінформацію, якщо вона доступна. Ви також можете зв'язатися з нами і подати звіт про помилку.", + "description": "Опис модального вікна проблем в редакторі" + }, + "havingIssuesModalButton": { + "message": "Завантажити сиру відеоінформацію", + "description": "Кнопка в модальному вікні проблем в редакторі" + }, + "havingIssuesModalButton2": { + "message": "Повідомити про помилку", + "description": "Друга кнопка в модальному вікні проблем в редакторі" + }, + "noRecordingFound": { + "message": "Запис не знайдено, вибачте :(", + "description": "Попередження про відсутність запису в редакторі" + }, + "memoryLimitTitle": { + "message": "Досягнуто ліміт пам'яті", + "description": "Заголовок повідомлення про досягнення ліміту пам'яті" + }, + "memoryLimitDescription": { + "message": "Ваш пристрій вичерпав доступну пам'ять для запису, що призвело до автоматичної зупинки запису. Якщо ви хочете записувати довше, спробуйте зменшити якість відео або видалити деякі файли на пристрої.", + "description": "Опис повідомлення про досягнення ліміту пам'яті" + }, + "understoodButton": { + "message": "Зрозуміло", + "description": "Кнопка 'Зрозуміло'" + }, + "notEnoughSpaceTitle": { + "message": "Недостатньо місця", + "description": "Заголовок повідомлення про недостатньо місця" + }, + "notEnoughSpaceDescription": { + "message": "Для роботи MyTechPassport потрібно принаймні 1 ГБ вільного місця. Будь ласка, звільніть простір на пристрої і спробуйте ще раз.", + "description": "Опис повідомлення про недостатньо місця" + }, + "clearSpaceButton": { + "message": "Видалити попередні записи", + "description": "Кнопка 'Видалити попередні записи'" + }, + "sandboxAdvancedTitle": { + "message": "Розширений", + "description": "Розділ Розширений на сторінці редактора в безпечному середовищі" + }, + "rawRecordingButtonTitle": { + "message": "Завантажити сирі відеофайли", + "description": "Кнопка завантаження сирого запису" + }, + "rawRecordingButtonDescription": { + "message": "Експорт оригінальних даних запису", + "description": "Мітка завантаження сирого запису" + }, + "troubleshootButtonTitle": { + "message": "Отримайте допомогу з вашим записом", + "description": "Кнопка усунення неполадок" + }, + "troubleShootButtonDescription": { + "message": "Відновіть ваше відео та вирішіть інші проблеми", + "description": "Мітка усунення неполадок" + }, + "rawRecordingModalTitle": { + "message": "Завантажити сирі відеофайли", + "description": "Заголовок модального вікна сирого запису" + }, + "rawRecordingModalDescription": { + "message": "Сирі відеофайли - це оригінальний відеофайл, який був записаний MyTechPassport. Цей відеофайл не оброблявся або редагувався, тому він може бути дуже великим і не всі пристрої можуть його програвати. Якщо у вас є проблеми з обробленим відео, ви можете використовувати цей файл для відновлення відео.", + "description": "Опис модального вікна сирого запису" + }, + "rawRecordingModalButton": { + "message": "Завантажити", + "description": "Кнопка модального вікна сирого запису" + }, + "troubleshootModalTitle": { + "message": "Завантажте системну інформацію та дані відео для відправки на усунення неполадок", + "description": "Заголовок модального вікна усунення неполадок" + }, + "troubleshootModalDescription": { + "message": "Після завантаження надішліть файл на адресу support@MyTechPassportsportsportsport.io з будь-якою відповідною інформацією. Ми використовуватимемо ці дані для вирішення будь-яких проблем, які у вас виникли з розширенням, і можливо, відновлення вашого відео.", + "description": "Опис модального вікна усунення неполадок" + }, + "troubleshootModalButton": { + "message": "Завантажити", + "description": "Кнопка модального вікна усунення неполадок" + }, + "overLimitModalTitle": { + "message": "Відео занадто довге для обробки на вашому пристрої", + "description": "Заголовок модального вікна обмеження понад 5 хвилин" + }, + "overLimitModalDescription": { + "message": "Оскільки MyTechPassport цілком приватний і працює локально, він обмежений апаратним забезпеченням вашого пристрою. Обробка відео цієї довжини займе дуже багато часу та буде вимагати значних ресурсів. Однак ви все ще можете завантажити файл WEBM або необроблену запису, але можливості редагування та експорту в MP4 недоступні. Так чи інакше, ви можете спробувати обробити відео, якщо розумієте ризики.", + "description": "Опис модального вікна обмеження понад 5 хвилин" + }, + "overLimitModalButton": { + "message": "Я розумію ризики, все одно спробувати", + "description": "Кнопка модального вікна обмеження понад 5 хвилин" + }, + "overLimitModalLearnMore": { + "message": "Дізнайтеся більше про обробку довгих відео.", + "description": "Посилання на додаткову інформацію в модальному вікні обмеження понад 5 хвилин" + }, + "recoveryModeTitle": { + "message": "Режим відновлення", + "description": "Заголовок режиму відновлення" + }, + "downloadForTroubleshootingOption": { + "message": "Завантажити дані для усунення проблем", + "description": "Опція завантаження для усунення проблем" + }, + "getHelpNav": { + "message": "Центр допомоги", + "description": "Елемент навігації для допомоги" + }, + "audioWarningTitle": { + "message": "Запис звуку сторінки", + "description": "Заголовок попередження про аудіо" + }, + "audioWarningDescription": { + "message": "Для запису звуку цієї сторінки використовуйте опцію '$tab$'.", + "description": "Опис попередження про аудіо", + "placeholders": { + "tab": { + "content": "$1", + "example": "Область вкладки" + } + } + }, + "extensionNotSupportedTitle": { + "message": "Розширення не підтримується на сторінці", + "description": "Заголовок попередження про непідтримку розширення на вкладці" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport не підтримувався на вашій попередній вкладці. Проте ви можете розпочати запис тут, а потім перейти на вкладку, але ваша камера і панель інструментів не будуть видимими.", + "description": "Опис попередження про непідтримку розширення на вкладці" + }, + "backupsTitle": { + "message": "Налаштування локального резервного копіювання для ваших записів в MyTechPassport", + "description": "Заголовок резервного копіювання" + }, + "backupsDescription1": { + "message": "Зберігайте копії всіх ваших записів. Якщо ви не налаштуєте резервне копіювання, ваші записи збережуться лише тоді, коли ви вирішите їх завантажити.", + "description": "Опис резервного копіювання" + }, + "backupsDescription2": { + "message": "Можливо, вам спершу потрібно створити нову папку, якщо ви намагаєтеся зберегти їх в Завантаження або інші системні папки.", + "description": "Опис резервного копіювання" + }, + "backupsSelectFolder": { + "message": "Вибрати папку", + "description": "Кнопка Вибрати папку" + }, + "backupsNotNow": { + "message": "Не зараз", + "description": "Кнопка Не зараз" + }, + "backupsOnTitle": { + "message": "Ваші записи локально синхронізовані", + "description": "Заголовок активного резервного копіювання" + }, + "backupsOnDescription": { + "message": "Щоб уникнути запитів на дозвіл кожного разу, коли ви записуєте, ми рекомендуємо залишити цю вкладку відкритою.", + "description": "Опис активного резервного копіювання" + }, + "backupsClose": { + "message": "Закрити вкладку все одно", + "description": "Кнопка Закрити вкладку все одно" + }, + "backupsStop": { + "message": "Зупинити резервне копіювання всіх записів", + "description": "Кнопка Зупинити резервне копіювання" + }, + "backupsConfirmTitle": { + "message": "Будь ласка, підтвердіть доступ до вашої локальної папки резервного копіювання MyTechPassport", + "description": "Заголовок підтвердження резервного копіювання" + }, + "backupsConfirmDescription": { + "message": "Вибачте, але нам потрібен ваш дозвіл ще раз, щоб продовжити створювати локальні копії ваших записів. Нажаль, нам доведеться запитувати кожного разу, коли ви закриєте цю вкладку, що може статися, якщо ви закриєте браузер або перезавантажите комп'ютер.", + "description": "Опис підтвердження резервного копіювання" + }, + "backupsConfirmAllow": { + "message": "Дозволити MyTechPassport продовжувати резервне копіювання записів", + "description": "Кнопка Дозволити в підтвердженні резервного копіювання" + }, + "backupsToggle": { + "message": "Створювати резервні копії записів", + "description": "Етикетка перемикача резервного копіювання" + }, + "backupPermissionFailTitle": { + "message": "Дозвіл на створення резервної копії запису не надано", + "description": "Заголовок помилки дозволу на резервне копіювання" + }, + "backupPermissionFailDescription": { + "message": "Ви не вибрали папку для створення локальної копії ваших записів. Залежно від версії вашого браузера або операційної системи, вас можуть попросити вибрати папку кожного разу, коли ви починаєте записувати. Ви можете спробувати ще раз або повністю вимкнути резервне копіювання, якщо ви не хочете надавати дозволи повторно.", + "description": "Опис помилки дозволу на резервне копіювання" + }, + "recordAudioWarningMacTitle": { + "message": "Запис аудіо комп'ютера", + "description": "Заголовок попередження про аудіо для macOS" + }, + "recordAudioWarningMacDescription": { + "message": "На macOS ви можете записувати звук лише з вкладок. Виберіть опцію 'Вкладка Chrome' і переконайтеся, що включена опція 'Також ділитися аудіо вкладки'.", + "description": "Опис попередження про аудіо для macOS" + }, + "recordAudioWarningOtherTitle": { + "message": "Запис аудіо комп'ютера", + "description": "Заголовок попередження про аудіо для інших систем" + }, + "recordAudioWarningOtherDescription": { + "message": "Якщо ви хочете записувати звук комп'ютера, переконайтеся, що опція 'Ділитися аудіо системи' активована. Якщо ви не бачите цю опцію, спробуйте оновити Chrome або перейти до опції запису вкладок.", + "description": "Опис попередження про аудіо для інших систем" + }, + + "maxResolutionLabel": { + "message": "Максимальний роздільна здатність", + "description": "Максимальний підпис роздільної здатності в меню налаштувань" + }, + "maxFPSLabel": { + "message": "Максимальний кадровий кут", + "description": "Максимальний підпис кадрового кута в меню налаштувань" + }, + + "notEnoughRAM": { + "message": "Недостатньо ОПЕРАТИВНОЇ ПАМ'ЯТІ", + "description": "Надпис Недостатньо ОПЕРАТИВНОЇ ПАМ'ЯТІ в меню налаштувань" + }, + "resizeWindowLabel": { + "message": "Змінити розмір вікна", + "description": "Мітка зміни розміру вікна в меню налаштувань" + }, + "screenTooSmallTooltip": { + "message": "Екран занадто малий для цієї роздільної здатності", + "description": "Підказка про занадто малий екран в меню налаштувань" + }, + "maxResolutionTooltip": { + "message": "Не можливо записувати у цій роздільній здатності на вашому пристрої", + "description": "Підказка про максимальну роздільну здатність в меню налаштувань" + }, + "permissionsModalReview": { + "message": "Переглянути дозволи", + "description": "Кнопка перегляду дозволів" + } +} diff --git a/build/_locales/zh_CN/messages.json b/build/_locales/zh_CN/messages.json new file mode 100644 index 0000000..d4a9094 --- /dev/null +++ b/build/_locales/zh_CN/messages.json @@ -0,0 +1,1035 @@ +{ + "extName": { + "message": "MyTechPassport - 屏幕录像和标注工具", + "description": "Extension name" + }, + "extDesc": { + "message": "最佳免费无限制屏幕录制工具。捕捉、标注、缩放、模糊、编辑视频等功能 - 无需登录,保护隐私。", + "description": "Extension description" + }, + "recordTab": { + "message": "录制", + "description": "Record tab label on popup" + }, + "videosTab": { + "message": "您的视频", + "description": "Videos tab label on popup" + }, + "screenType": { + "message": "屏幕", + "description": "Screen recording type label on popup" + }, + "tabType": { + "message": "标签区域", + "description": "Tab area recording type label on popup" + }, + "cameraType": { + "message": "摄像头", + "description": "Camera recording type label on popup" + }, + "mockupType": { + "message": "模拟", + "description": "Mockup recording type label on popup" + }, + "customAreaRecordingDisabledTitle": { + "message": "自定义区域录制已禁用", + "description": "Custom area recording disabled warning on popup for Chrome version older than 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "请更新Chrome版本至110+", + "description": "Custom area recording disabled warning description on popup for Chrome version older than 104" + }, + "customAreaRecordingDisabledAction": { + "message": "更新", + "description": "Custom area recording disabled warning action on popup for Chrome version older than 104" + }, + "permissionsModalTitle": { + "message": "请检查您的权限", + "description": "Camera / microphone permissions warning modal title" + }, + "permissionsModalDescription": { + "message": "看起来MyTechPassport无法访问您的摄像头或麦克风。请确保通过单击地址栏中的摄像机图标允许访问。", + "description": "Camera / microphone permissions warning modal description" + }, + "permissionsModalDismiss": { + "message": "忽略", + "description": "Camera / microphone permissions warning modal dismiss button" + }, + "allowCameraAccessButton": { + "message": "允许摄像头访问", + "description": "Allow camera access button" + }, + "allowMicrophoneAccessButton": { + "message": "允许麦克风访问", + "description": "Allow microphone access button" + }, + "pushToTalkLabel": { + "message": "按住说话", + "description": "Push to talk switch label" + }, + "customAreaLabel": { + "message": "设置要录制的区域", + "description": "Custom area switch label" + }, + "flipCameraLabel": { + "message": "翻转摄像头", + "description": "Flip camera switch label" + }, + "backgroundEffectsLabel": { + "message": "背景效果", + "description": "Background effects switch label" + }, + "recordButtonLabel": { + "message": "开始录制", + "description": "Record button label" + }, + "recordButtonInProgressLabel": { + "message": "正在开始录制...", + "description": "Record button in progress label" + }, + "recordButtonNoCameraLabel": { + "message": "设置摄像头以开始录制", + "description": "Record button label when in camera mode and no camera is selected" + }, + "showMoreOptionsLabel": { + "message": "显示更多选项", + "description": "Show more options label" + }, + "systemAudioLabel": { + "message": "包括系统音频", + "description": "选项卡/系统音频标签" + }, + "hideToolbarLabel": { + "message": "隐藏工具栏", + "description": "Hide toolbar label" + }, + "countdownLabel": { + "message": "倒计时", + "description": "Countdown label" + }, + "alarmLabel": { + "message": "设置时间限制", + "description": "Alarm label" + }, + "blurTypeLabel": { + "message": "模糊背景", + "description": "Blur background label" + }, + "noneDropdownLabel": { + "message": "无", + "description": "No device selected" + }, + "noCameraDropdownLabel": { + "message": "无摄像头", + "description": "No camera selected" + }, + "noMicrophoneDropdownLabel": { + "message": "无麦克风", + "description": "No microphone selected" + }, + "selectSourceDropdownPlaceholder": { + "message": "选择源", + "description": "Select source placeholder" + }, + "offLabel": { + "message": "关闭", + "description": "Off label on dropdown" + }, + "regionWidthLabel": { + "message": "宽度", + "description": "Region width label" + }, + "regionHeightLabel": { + "message": "高度", + "description": "Region height label" + }, + "addImageToastTitle": { + "message": "单击放置图像", + "description": "Toast that shows when adding a new image" + }, + "finishRecordingTooltip": { + "message": "结束录制", + "description": "Finish recording tooltip" + }, + "restartRecordingTooltip": { + "message": "重新开始录制", + "description": "Restart recording tooltip" + }, + "pauseRecordingTooltip": { + "message": "暂停录制", + "description": "Pause recording tooltip" + }, + "resumeRecordingTooltip": { + "message": "恢复录制", + "description": "Resume recording tooltip" + }, + "cancelRecordingTooltip": { + "message": "取消录制", + "description": "Cancel recording tooltip" + }, + "toggleDrawingToolsTooltip": { + "message": "切换绘图工具", + "description": "Toggle drawing tools tooltip" + }, + "toggleBlurToolTooltip": { + "message": "切换模糊工具", + "description": "Toggle blur tools tooltip" + }, + "toggleCursorOptionsTooltip": { + "message": "切换光标选项", + "description": "Toggle cursor options tooltip" + }, + "disableCameraTooltip": { + "message": "禁用摄像头", + "description": "Disable camera tooltip" + }, + "enableCameraTooltip": { + "message": "启用摄像头", + "description": "Enable camera tooltip" + }, + "noCameraPermissionsTooltip": { + "message": "无摄像头权限", + "description": "No camera permissions tooltip" + }, + "disableMicrophoneTooltip": { + "message": "禁用麦克风", + "description": "Disable microphone tooltip" + }, + "enableMicrophoneTooltip": { + "message": "启用麦克风", + "description": "Enable microphone tooltip" + }, + "noMicrophonePermissionsTooltip": { + "message": "无麦克风权限", + "description": "No microphone permissions tooltip" + }, + "selectToolTooltip": { + "message": "选择", + "description": "Select tool tooltip" + }, + "penToolTooltip": { + "message": "钢笔", + "description": "Pen tool tooltip" + }, + "highlighterToolTooltip": { + "message": "荧光笔", + "description": "Highlighter tool tooltip" + }, + "eraserToolTooltip": { + "message": "橡皮擦", + "description": "Eraser tool tooltip" + }, + "textToolTooltip": { + "message": "文本", + "description": "Text tool tooltip" + }, + "shapeToolTooltip": { + "message": "形状工具", + "description": "Shape tool tooltip" + }, + "arrowToolTooltip": { + "message": "箭头", + "description": "Arrow tool tooltip" + }, + "imageToolTooltip": { + "message": "图像", + "description": "Image tool tooltip" + }, + "undoTooltip": { + "message": "撤销", + "description": "Undo tooltip" + }, + "redoTooltip": { + "message": "恢复", + "description": "Redo tooltip" + }, + "clearCanvasTooltip": { + "message": "清空画布", + "description": "Clear canvas tooltip" + }, + "moreColorsTooltip": { + "message": "更多颜色", + "description": "More colors tooltip" + }, + "thickStrokeTooltip": { + "message": "粗画笔", + "description": "Thick stroke tooltip" + }, + "mediumStrokeTooltip": { + "message": "中画笔", + "description": "Medium stroke tooltip" + }, + "thinStrokeTooltip": { + "message": "细画笔", + "description": "Thin stroke tooltip" + }, + "togglePictureinPictureModeTooltip": { + "message": "切换画中画模式", + "description": "Toggle picture-in-picture mode tooltip" + }, + "toggleFillTooltip": { + "message": "切换填充", + "description": "Toggle fill tooltip" + }, + "drawingModeToast": { + "message": "绘图模式", + "description": "Drawing mode toast" + }, + "blurModeToast": { + "message": "模糊模式", + "description": "Blur mode toast" + }, + "clearBlurredElementsTooltip": { + "message": "清除所有模糊元素", + "description": "Clear all blurred elements tooltip" + }, + "highlightClicksTooltip": { + "message": "突出显示点击", + "description": "Highlight clicks tooltip" + }, + "highlightCursorTooltip": { + "message": "突出显示光标", + "description": "Highlight cursor tooltip" + }, + "spotlightCursorTooltip": { + "message": "聚焦光标", + "description": "Spotlight cursor tooltip" + }, + "permissionsModalNoShowAgain": { + "message": "不再显示", + "description": "Permissions modal dismiss button" + }, + "restartModalTitle": { + "message": "确定要重新开始录制吗?", + "description": "Restart recording modal title" + }, + "restartModalDescription": { + "message": "您当前的视频进度将丢失。", + "description": "Restart recording modal description" + }, + "restartModalRestart": { + "message": "重新开始录制", + "description": "Restart recording modal restart button" + }, + "restartModalResume": { + "message": "继续录制", + "description": "Restart recording modal resume button" + }, + "discardModalTitle": { + "message": "确定要放弃录制吗?", + "description": "Discard recording modal title" + }, + "discardModalDescription": { + "message": "您当前的视频进度将丢失。", + "description": "Discard recording modal description" + }, + "discardModalDiscard": { + "message": "放弃录制", + "description": "Discard recording modal discard button" + }, + "discardModalResume": { + "message": "继续录制", + "description": "Discard recording modal resume button" + }, + "recorderSelectTitle": { + "message": "选择要录制的内容", + "description": "Title in recording page" + }, + "recorderSelectProgressTitle": { + "message": "录制中...", + "description": "Title in recording page while recording" + }, + "recorderSelectDescription": { + "message": "保持此选项卡打开。一旦保存录制,它将关闭。", + "description": "Description in recording page" + }, + "sandboxProgressTitle": { + "message": "准备录制中...", + "description": "Title in sandbox page while recording / saving" + }, + "sandboxProgressDescription": { + "message": "保持此选项卡打开。录制/保存完成后,它将更新。", + "description": "Description in sandbox page while recording / saving" + }, + "sandboxEditorMainTitle": { + "message": "编辑器", + "description": "Title in navigation of the sandbox editor page" + }, + "sandboxEditorCancelButton": { + "message": "取消", + "description": "Cancel button in sandbox editor page" + }, + "sandboxEditorRevertButton": { + "message": "恢复原始状态", + "description": "Revert button in sandbox editor page" + }, + "sandboxEditorResetButton": { + "message": "重置", + "description": "Reset button in sandbox editor page" + }, + "sandboxEditorSaveButton": { + "message": "保存更改", + "description": "Save button in sandbox editor page" + }, + "sandboxEditorSaveProgressButton": { + "message": "保存中...", + "description": "Save button in sandbox editor page while saving" + }, + "sandboxAudioDragAndDrop": { + "message": "拖放音频文件", + "description": "Drag and drop audio file in sandbox editor page" + }, + "sandboxAudioOrBrowse": { + "message": "或点击浏览", + "description": "Or click to browse audio file in sandbox editor page" + }, + "sandboxAudioSettingsTitle": { + "message": "设置", + "description": "Audio settings title in sandbox editor page" + }, + "sandboxAudioVolumeLabel": { + "message": "音量", + "description": "Audio volume label in sandbox editor page" + }, + "sandboxAudioUpdateButton": { + "message": "更新", + "description": "Update audio button in sandbox editor page" + }, + "sandboxCropTitle": { + "message": "裁剪", + "description": "Crop title in sandbox editor page" + }, + "widthLabel": { + "message": "宽度", + "description": "Width label for properties" + }, + "heightLabel": { + "message": "高度", + "description": "Height label for properties" + }, + "leftLabel": { + "message": "左", + "description": "Left label for properties" + }, + "topLabel": { + "message": "顶部", + "description": "Top label for properties" + }, + "sandboxEditorTrimInfo": { + "message": "拖动手柄并使用左侧的按钮编辑所选部分。", + "description": "Info about trimming in sandbox editor" + }, + "sandboxEditorTrimButton": { + "message": "修剪视频", + "description": "Trim button in sandbox editor" + }, + "sandboxEditorTrimProgressButton": { + "message": "正在修剪...", + "description": "Trim button in sandbox editor while trimming" + }, + "sandboxEditorCutButton": { + "message": "剪切部分", + "description": "Cut button in sandbox editor" + }, + "sandboxEditorCutProgressButton": { + "message": "正在剪切...", + "description": "Cut button in sandbox editor while cutting" + }, + "sandboxEditorMuteButton": { + "message": "静音音频", + "description": "Mute button in sandbox editor" + }, + "sandboxEditorMuteProgressButton": { + "message": "正在静音...", + "description": "Mute button in sandbox editor while muting" + }, + "learnMoreDot": { + "message": "了解更多。", + "description": "Learn more with a dot" + }, + "undoLabel": { + "message": "撤销", + "description": "Undo label" + }, + "redoLabel": { + "message": "恢复", + "description": "Redo label" + }, + "leaveReview": { + "message": "发表评论", + "description": "Leave a review button" + }, + "followForUpdates": { + "message": "关注获取更新", + "description": "Follow for updates button" + }, + "offlineLabelTitle": { + "message": "您当前处于离线状态", + "description": "Offline label" + }, + "offlineLabelDescription": { + "message": "某些功能在重新连接之前不可用", + "description": "Offline label description" + }, + "offlineLabelTryAgain": { + "message": "重试", + "description": "Offline label try again button" + }, + "updateChromeLabelTitle": { + "message": "Chrome 需要更新", + "description": "Update Chrome label" + }, + "updateChromeLabelDescription": { + "message": "更新以访问更多功能", + "description": "Update Chrome label description" + }, + "learnMoreLabel": { + "message": "了解更多", + "description": "Learn more button" + }, + "overLimitLabelTitle": { + "message": "视频过长,无法在本地处理", + "description": "编辑器中超过5分钟的限制标签" + }, + "overLimitLabelDescription": { + "message": "编辑和MP4格式导出不可用", + "description": "编辑器中超过5分钟的限制描述" + }, + "videoProcessingLabelTitle": { + "message": "视频正在处理中...", + "description": "Video processing label in editor" + }, + "videoProcessingLabelDescription": { + "message": "升级以加快编辑速度", + "description": "Video processing description in editor" + }, + "sandboxEditTitle": { + "message": "编辑", + "description": "Edit title in sandbox editor page" + }, + "noConnectionLabel": { + "message": "无连接", + "description": "No connection label" + }, + "notAvailableLabel": { + "message": "不可用", + "description": "Not available label" + }, + "editButtonTitle": { + "message": "编辑视频", + "description": "Trim label button" + }, + "editButtonDescription": { + "message": "剪辑、裁剪或静音视频", + "description": "Trim label" + }, + "preparingLabel": { + "message": "正在准备视频,请稍候...", + "description": "Preparing label" + }, + "cropButtonTitle": { + "message": "裁剪", + "description": "Crop label button" + }, + "cropButtonDescription": { + "message": "裁剪和调整视频大小", + "description": "Crop label" + }, + "addAudioButtonTitle": { + "message": "添加音频", + "description": "Add audio label button" + }, + "addAudioButtonDescription": { + "message": "上传您自己的音频以添加到视频", + "description": "Add audio label" + }, + "sandboxSaveTitle": { + "message": "保存", + "description": "Save title in sandbox editor page" + }, + "signOutDriveLabel": { + "message": "从 Drive 注销", + "description": "Sign out of Google Drive label" + }, + "savingDriveLabel": { + "message": "保存中...", + "description": "Saving to Google Drive label" + }, + "saveDriveButtonTitle": { + "message": "保存到 Drive", + "description": "Save to Google Drive button" + }, + "saveDriveButtonDescription": { + "message": "将当前版本保存到 Google Drive", + "description": "Save to Google Drive label" + }, + "signInDriveLabel": { + "message": "登录并保存到 Drive", + "description": "Sign in to Google Drive label" + }, + "sandboxExportTitle": { + "message": "导出", + "description": "Export title in sandbox editor page" + }, + "downloadingLabel": { + "message": "下载中...", + "description": "Downloading label" + }, + "downloadWEBMButtonTitle": { + "message": "下载为 .webm", + "description": "Download WEBM button" + }, + "downloadWEBMButtonDescription": { + "message": "导出为 .webm 视频", + "description": "Download WEBM label" + }, + "downloadMP4ButtonTitle": { + "message": "下载为 .mp4", + "description": "Download MP4 button" + }, + "downloadMP4ButtonDescription": { + "message": "导出为 .mp4 视频(推荐)", + "description": "Download MP4 label" + }, + "downloadGIFButtonTitle": { + "message": "下载为 .gif", + "description": "Download GIF button" + }, + "downloadGIFButtonDescription": { + "message": "导出为 GIF(最长30秒)", + "description": "Download GIF label" + }, + "shareModalSandboxTitle": { + "message": "与他人分享您的视频", + "description": "Share modal title in sandbox editor page" + }, + "shareModalSandboxDescription": { + "message": "即将推出!留下您的电子邮件以保持更新,并在分享可用时收到通知。", + "description": "Share modal description in sandbox editor page" + }, + "shareModalSandboxButton": { + "message": "加入等待列表", + "description": "Share modal email placeholder in sandbox editor page" + }, + "shareSandboxButton": { + "message": "分享视频", + "description": "Share button in sandbox editor page" + }, + "replaceAudioEditor": { + "message": "替换现有音频", + "description": "Replace audio button in editor" + }, + "zoomToPointPopup": { + "message": "缩放到光标位置", + "description": "Zoom to point popup" + }, + "stayInPagePopup": { + "message": "录制时保持在页面中", + "description": "Stay in page popup" + }, + "micReminderPopup": { + "message": "麦克风已关闭警告", + "description": "Mic reminder popup" + }, + "helpPopup": { + "message": "帮助", + "description": "Help popup button" + }, + "pausedRecordingToast": { + "message": "录制已暂停。按播放按钮继续。", + "description": "Paused recording modal title" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport 没有权限录制您的屏幕", + "description": "Permission modal title" + }, + "chromePermissionsModalDescription": { + "message": "为启用屏幕录制,您必须在提示时授予 MyTechPassport 捕获屏幕的权限。", + "description": "Permission modal description" + }, + "chromePermissionsModalAction": { + "message": "启用屏幕录制", + "description": "Permission modal action" + }, + "chromePermissionsModalCancel": { + "message": "取消", + "description": "Permission modal cancel" + }, + "micMutedModalTitle": { + "message": "您的麦克风已静音", + "description": "Microphone muted modal title" + }, + "micMutedModalDescription": { + "message": "要在录制中包含音频,您需要解除麦克风的静音。是否继续不使用音频?", + "description": "Microphone muted modal description" + }, + "micMutedModalAction": { + "message": "是的,继续", + "description": "Microphone muted modal continue" + }, + "micMutedModalCancel": { + "message": "取消", + "description": "Microphone muted modal cancel" + }, + "setupTitle": { + "message": "在三个简单步骤中开始使用MyTechPassport:", + "description": "Set up steps title" + }, + "setupStep1Before": { + "message": "1- 点击 ", + "description": "Set up step 1, before the icon. It needs a space at the end." + }, + "setupStep1After": { + "message": " 扩展图标", + "description": "Set up step 1, after the icon. It needs a space at the beginning." + }, + "setupStep2Before": { + "message": "2- 按下 ", + "description": "Set up step 2, before the icon. It needs a space at the end." + }, + "setupStep2After": { + "message": " 固定图标", + "description": "Set up step 2, after the icon. It needs a space at the beginning." + }, + "setupStep3Before": { + "message": "3- 点击 ", + "description": "Set up step 3, before the icon. It needs a space at the end." + }, + "setupStep3After": { + "message": " MyTechPassport图标以启动", + "description": "Set up step 3, after the icon. It needs a space at the beginning." + }, + "setupCompleteTitle": { + "message": "太棒了!您已经准备好了", + "description": "Set up complete title" + }, + "setupCompleteDescription": { + "message": "您现在可以在这里开始录制,或在任何其他标签中。", + "description": "Set up complete description" + }, + "clickHereDrawOnboarding": { + "message": "单击此处进行绘制", + "description": "Click here onboarding" + }, + "countdownMessage": { + "message": "放松。单击任何地方停止倒计时。", + "description": "Countdown message" + }, + "sandboxEditorTooSmallInfo": { + "message": "由于帧之间的间隔,对于短时间范围,编辑可能不准确。", + "description": "Info about the editor being too small" + }, + "processingBannerEditor": { + "message": "视频正在处理,播放可能不准确或中断。", + "description": "Processing banner in the editor" + }, + "croppingInfoTitle": { + "message": "裁剪可能需要一些时间", + "description": "Cropping info title" + }, + "croppingInfoDescription": { + "message": "升级以获得更快的处理速度", + "description": "Cropping info description" + }, + "micOnToast": { + "message": "麦克风已启用", + "description": "Microphone enabled toast title" + }, + "micOffToast": { + "message": "麦克风已禁用", + "description": "Microphone disabled toast title" + }, + "hideUIAlerts": { + "message": "隐藏UI通知", + "description": "Hide UI alerts button" + }, + "noShowAgain": { + "message": "不再显示", + "description": "Don't show again button" + }, + "toolbarHoverOnly": { + "message": "在不使用时隐藏工具栏", + "description": "Only show toolbar on hover button" + }, + "updateAnnouncementTitle": { + "message": "欢迎使用新版 MyTechPassport!", + "description": "现有用户的更新公告标题" + }, + "updateAnnouncementDescription": { + "message": "我们进行了设计更新并增加了许多新功能,但请放心,它仍然是您熟悉和喜爱的免费、私密且开源的扩展。", + "description": "现有用户的更新公告描述" + }, + "updateAnnouncementLearnMore": { + "message": "了解有关更新的更多信息。", + "description": "现有用户的更新公告了解更多链接" + }, + "updateAnnouncementButton": { + "message": "开始使用", + "description": "现有用户的更新公告按钮" + }, + "streamErrorModalTitle": { + "message": "启动录制时出错", + "description": "流错误模态框标题" + }, + "streamErrorModalDescription": { + "message": "看起来启动录制时出现了错误。请重新启动您的浏览器并重试。如果问题仍然存在,请通过 support@MyTechPassport.io 与我们联系。", + "description": "流错误模态框描述" + }, + "highestQuality": { + "message": "最高质量", + "description": "弹出窗口中的最高质量标签" + }, + "restoreRecording": { + "message": "恢复最近的录音", + "description": "弹出窗口中恢复最近的录音按钮" + }, + "havingIssuesButton": { + "message": "遇到问题了吗?", + "description": "编辑器中的问题按钮" + }, + "havingIssuesModalTitle": { + "message": "无法查看您的录像?", + "description": "编辑器中的问题模态框标题" + }, + "havingIssuesModalDescription": { + "message": "如果您已经完成录制并发现自己在此页面上看不到您的视频,您可以尝试下载原始视频数据(如果可用)。您还可以联系我们并提交错误报告。", + "description": "编辑器中的问题模态框描述" + }, + "havingIssuesModalButton": { + "message": "下载原始视频数据", + "description": "编辑器中的问题模态框按钮" + }, + "havingIssuesModalButton2": { + "message": "报告问题", + "description": "编辑器中的问题模态框第二个按钮" + }, + "noRecordingFound": { + "message": "未找到录制,抱歉 :(", + "description": "编辑器中的未找到录制警告" + }, + "memoryLimitTitle": { + "message": "内存限制达到", + "description": "内存限制达到标题" + }, + "memoryLimitDescription": { + "message": "您的设备已经用尽了可用内存进行录制,导致录制自动停止。如果您想要录制更长时间,可以尝试降低视频质量或清理设备上的一些空间。", + "description": "内存限制达到描述" + }, + "understoodButton": { + "message": "知道了", + "description": "知道了按钮" + }, + "notEnoughSpaceTitle": { + "message": "空间不足", + "description": "空间不足标题" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassport需要至少1GB的空闲空间进行录制。请释放设备上的空间并重试。", + "description": "空间不足描述" + }, + "clearSpaceButton": { + "message": "清除之前的录制", + "description": "清除之前的录制按钮" + }, + "sandboxAdvancedTitle": { + "message": "高级", + "description": "沙盒编辑器页面的高级部分" + }, + "rawRecordingButtonTitle": { + "message": "下载原始视频文件", + "description": "下载原始录制按钮" + }, + "rawRecordingButtonDescription": { + "message": "导出原始录制数据", + "description": "下载原始录制标签" + }, + "troubleshootButtonTitle": { + "message": "获取有关您的录制的帮助", + "description": "故障排除按钮" + }, + "troubleShootButtonDescription": { + "message": "恢复您的视频并解决其他问题", + "description": "故障排除标签" + }, + "rawRecordingModalTitle": { + "message": "下载原始视频文件", + "description": "原始录制模态框标题" + }, + "rawRecordingModalDescription": { + "message": "原始视频文件是由MyTechPassport录制的原始视频文件。此视频未经处理或编辑,因此可能非常大且可能无法在所有设备上播放。如果您在处理后的视频方面遇到问题,可以使用此文件恢复您的视频。", + "description": "原始录制模态框描述" + }, + "rawRecordingModalButton": { + "message": "下载", + "description": "原始录制模态框按钮" + }, + "troubleshootModalTitle": { + "message": "下载系统信息和视频数据并发送进行故障排除", + "description": "故障排除模态框标题" + }, + "troubleshootModalDescription": { + "message": "下载后,请将文件发送至support@MyTechPassport.io,附上任何相关信息。我们将使用此数据帮助您解决扩展程序的任何问题,并在可能的情况下恢复您的视频。", + "description": "故障排除模态框描述" + }, + "troubleshootModalButton": { + "message": "下载", + "description": "故障排除模态框按钮" + }, + "overLimitModalTitle": { + "message": "视频过长,无法在您的设备上处理", + "description": "超过5分钟限制的模态框标题" + }, + "overLimitModalDescription": { + "message": "由于MyTechPassport完全私密且在本地运行,它受到您设备硬件的限制。处理这样长度的视频需要很长时间,而且资源消耗很大。但您仍然可以下载WEBM文件或原始录制文件,但无法进行编辑和MP4导出。尽管如此,如果您了解风险,仍然可以尝试处理该视频。", + "description": "超过5分钟限制的模态框描述" + }, + "overLimitModalButton": { + "message": "我理解风险,仍然尝试", + "description": "超过5分钟限制的模态框按钮" + }, + "overLimitModalLearnMore": { + "message": "了解有关处理长视频的更多信息。", + "description": "超过5分钟限制的模态框了解更多链接(带有句号)" + }, + + "recoveryModeTitle": { + "message": "恢复模式", + "description": "恢复模式标题" + }, + + "downloadForTroubleshootingOption": { + "message": "下载故障排除数据", + "description": "故障排除选项" + }, + "getHelpNav": { + "message": "帮助中心", + "description": "帮助导航元素" + }, + "audioWarningTitle": { + "message": "录制页面音频", + "description": "音频警告标题" + }, + "audioWarningDescription": { + "message": "要录制此页面的音频,请使用'$tab$'选项。", + "description": "音频警告说明", + "placeholders": { + "tab": { + "content": "$1", + "example": "选项卡区域" + } + } + }, + "extensionNotSupportedTitle": { + "message": "页面不支持扩展", + "description": "选项卡上不支持的扩展标题" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport在您之前的选项卡上不受支持。尽管如此,您可以在此开始录制,然后切换到选项卡,但您的摄像头和工具栏将不可见。", + "description": "选项卡上不支持扩展的说明" + }, + "backupsTitle": { + "message": "为MyTechPassport录制设置本地备份", + "description": "备份标题" + }, + "backupsDescription1": { + "message": "保留您进行的所有录制的备份。如果您不设置备份,只有在决定下载它们时才会保存您的录制。", + "description": "备份说明" + }, + "backupsDescription2": { + "message": "如果您尝试保存到下载或其他系统文件夹,则可能需要首先创建一个新文件夹。", + "description": "备份说明" + }, + "backupsSelectFolder": { + "message": "选择文件夹", + "description": "选择文件夹按钮" + }, + "backupsNotNow": { + "message": "现在不", + "description": "现在不按钮" + }, + "backupsOnTitle": { + "message": "您的录制已本地同步", + "description": "已启用的备份标题" + }, + "backupsOnDescription": { + "message": "为了避免每次录制时都请求权限,我们建议保持此选项卡打开。", + "description": "已启用的备份说明" + }, + "backupsClose": { + "message": "仍然关闭选项卡", + "description": "仍然关闭选项卡按钮" + }, + "backupsStop": { + "message": "停止所有录制的备份", + "description": "停止备份按钮" + }, + "backupsConfirmTitle": { + "message": "请重新确认对MyTechPassport本地备份文件夹的访问权限", + "description": "备份确认标题" + }, + "backupsConfirmDescription": { + "message": "很抱歉,我们需要再次获得您的许可,以继续创建您的录制的本地副本。不幸的是,每次关闭此选项卡时,我们都需要询问,这可能会在您关闭浏览器或重新启动计算机时发生。", + "description": "备份确认说明" + }, + "backupsConfirmAllow": { + "message": "允许MyTechPassport继续备份录制", + "description": "备份确认中的允许按钮" + }, + "backupsToggle": { + "message": "备份录制", + "description": "备份切换标签" + }, + "backupPermissionFailTitle": { + "message": "未授予备份录制的权限", + "description": "备份权限失败标题" + }, + "backupPermissionFailDescription": { + "message": "您未选择要创建您的录制的本地副本的文件夹。根据浏览器或操作系统的版本,每次开始录制时可能会要求您选择文件夹。您可以再次尝试或完全禁用备份,如果您不想重复授予权限。", + "description": "备份权限失败说明" + }, + "recordAudioWarningMacTitle": { + "message": "录制计算机音频", + "description": "macOS音频警告标题" + }, + "recordAudioWarningMacDescription": { + "message": "在macOS上,您只能录制选项卡的音频。请选择'Chrome选项卡'选项,并确保启用'同时共享选项卡音频'选项。", + "description": "macOS音频警告说明" + }, + "recordAudioWarningOtherTitle": { + "message": "录制计算机音频", + "description": "其他系统音频警告标题" + }, + "recordAudioWarningOtherDescription": { + "message": "如果您想录制计算机音频,请确保启用'共享系统音频'选项。如果您看不到此选项,请尝试更新Chrome或切换到选项卡录制选项。", + "description": "其他系统音频警告说明" + }, + "maxResolutionLabel": { + "message": "最高分辨率", + "description": "设置菜单中的最高分辨率标签" + }, + "maxFPSLabel": { + "message": "最高帧率", + "description": "设置菜单中的最高帧率标签" + }, + + "notEnoughRAM": { + "message": "内存不足", + "description": "设置菜单中的内存不足标签" + }, + "resizeWindowLabel": { + "message": "调整窗口大小", + "description": "设置菜单中的调整窗口大小标签" + }, + "screenTooSmallTooltip": { + "message": "屏幕尺寸不足以支持此分辨率", + "description": "设置菜单中的屏幕尺寸不足提示" + }, + "maxResolutionTooltip": { + "message": "您的设备无法以此分辨率录制", + "description": "设置菜单中的最大分辨率提示" + }, + "permissionsModalReview": { + "message": "审查权限", + "description": "审查权限按钮" + } +} diff --git a/build/_locales/zh_TW/messages.json b/build/_locales/zh_TW/messages.json new file mode 100644 index 0000000..d4e62d1 --- /dev/null +++ b/build/_locales/zh_TW/messages.json @@ -0,0 +1,1040 @@ +{ + "extName": { + "message": "MyTechPassport - 屏幕錄像和標註工具", + "description": "Extension name" + }, + "extDesc": { + "message": "最佳的免費屏幕錄製工具,無任何限制。捕捉、標註、縮放、模糊、編輯視頻等等 - 無需註冊,保護隱私。", + "description": "Extension description" + }, + "recordTab": { + "message": "录制", + "description": "Record tab label on popup" + }, + "videosTab": { + "message": "您的视频", + "description": "Videos tab label on popup" + }, + "screenType": { + "message": "屏幕", + "description": "Screen recording type label on popup" + }, + "tabType": { + "message": "标签区域", + "description": "Tab area recording type label on popup" + }, + "cameraType": { + "message": "摄像头", + "description": "Camera recording type label on popup" + }, + "mockupType": { + "message": "模型", + "description": "Mockup recording type label on popup" + }, + "customAreaRecordingDisabledTitle": { + "message": "禁用自定义区域录制", + "description": "Custom area recording disabled warning on popup for Chrome version older than 104" + }, + "customAreaRecordingDisabledDescription": { + "message": "更新Chrome版本至110+", + "description": "Custom area recording disabled warning description on popup for Chrome version older than 104" + }, + "customAreaRecordingDisabledAction": { + "message": "更新", + "description": "Custom area recording disabled warning action on popup for Chrome version older than 104" + }, + "permissionsModalTitle": { + "message": "检查您的权限", + "description": "Camera / microphone permissions warning modal title" + }, + "permissionsModalDescription": { + "message": "看起来MyTechPassport无法访问您的摄像头或麦克风。请确保通过单击地址栏中的摄像头图标允许访问。", + "description": "Camera / microphone permissions warning modal description" + }, + "permissionsModalDismiss": { + "message": "忽略", + "description": "Camera / microphone permissions warning modal dismiss button" + }, + "allowCameraAccessButton": { + "message": "允许摄像头访问", + "description": "Allow camera access button" + }, + "allowMicrophoneAccessButton": { + "message": "允许麦克风访问", + "description": "Allow microphone access button" + }, + "pushToTalkLabel": { + "message": "按住说话", + "description": "Push to talk switch label" + }, + "customAreaLabel": { + "message": "设置要录制的区域", + "description": "Custom area switch label" + }, + "flipCameraLabel": { + "message": "翻转摄像头", + "description": "Flip camera switch label" + }, + "backgroundEffectsLabel": { + "message": "背景效果", + "description": "Background effects switch label" + }, + "recordButtonLabel": { + "message": "开始录制", + "description": "Record button label" + }, + "recordButtonInProgressLabel": { + "message": "正在开始录制...", + "description": "Record button in progress label" + }, + "recordButtonNoCameraLabel": { + "message": "设置摄像头以录制", + "description": "Record button label when in camera mode and no camera is selected" + }, + "showMoreOptionsLabel": { + "message": "显示更多选项", + "description": "Show more options label" + }, + + "systemAudioLabel": { + "message": "包括系統音訊", + "description": "標籤/系統音訊標籤" + }, + "hideToolbarLabel": { + "message": "隐藏工具栏", + "description": "Hide toolbar label" + }, + "countdownLabel": { + "message": "倒计时", + "description": "Countdown label" + }, + "alarmLabel": { + "message": "设置时间限制", + "description": "Alarm label" + }, + "blurTypeLabel": { + "message": "模糊", + "description": "Blur background label" + }, + "noneDropdownLabel": { + "message": "无", + "description": "No device selected" + }, + "noCameraDropdownLabel": { + "message": "无摄像头", + "description": "No camera selected" + }, + "noMicrophoneDropdownLabel": { + "message": "无麦克风", + "description": "No microphone selected" + }, + "selectSourceDropdownPlaceholder": { + "message": "选择源", + "description": "Select source placeholder" + }, + "offLabel": { + "message": "关闭", + "description": "Off label on dropdown" + }, + "regionWidthLabel": { + "message": "宽度", + "description": "Region width label" + }, + "regionHeightLabel": { + "message": "高度", + "description": "Region height label" + }, + "addImageToastTitle": { + "message": "单击以放置图像", + "description": "Toast that shows when adding a new image" + }, + "finishRecordingTooltip": { + "message": "完成录制", + "description": "Finish recording tooltip" + }, + "restartRecordingTooltip": { + "message": "重新开始录制", + "description": "Restart recording tooltip" + }, + "pauseRecordingTooltip": { + "message": "暂停录制", + "description": "Pause recording tooltip" + }, + "resumeRecordingTooltip": { + "message": "继续录制", + "description": "Resume recording tooltip" + }, + "cancelRecordingTooltip": { + "message": "取消录制", + "description": "Cancel recording tooltip" + }, + "toggleDrawingToolsTooltip": { + "message": "切换绘图工具", + "description": "Toggle drawing tools tooltip" + }, + "toggleBlurToolTooltip": { + "message": "切换模糊工具", + "description": "Toggle blur tools tooltip" + }, + "toggleCursorOptionsTooltip": { + "message": "切换光标选项", + "description": "Toggle cursor options tooltip" + }, + "disableCameraTooltip": { + "message": "禁用摄像头", + "description": "Disable camera tooltip" + }, + "enableCameraTooltip": { + "message": "启用摄像头", + "description": "Enable camera tooltip" + }, + "noCameraPermissionsTooltip": { + "message": "无摄像头权限", + "description": "No camera permissions tooltip" + }, + "disableMicrophoneTooltip": { + "message": "禁用麦克风", + "description": "Disable microphone tooltip" + }, + "enableMicrophoneTooltip": { + "message": "启用麦克风", + "description": "Enable microphone tooltip" + }, + "noMicrophonePermissionsTooltip": { + "message": "无麦克风权限", + "description": "No microphone permissions tooltip" + }, + "selectToolTooltip": { + "message": "选择工具", + "description": "Select tool tooltip" + }, + "penToolTooltip": { + "message": "钢笔工具", + "description": "Pen tool tooltip" + }, + "highlighterToolTooltip": { + "message": "荧光笔工具", + "description": "Highlighter tool tooltip" + }, + "eraserToolTooltip": { + "message": "橡皮擦工具", + "description": "Eraser tool tooltip" + }, + "textToolTooltip": { + "message": "文本工具", + "description": "Text tool tooltip" + }, + "shapeToolTooltip": { + "message": "形状工具", + "description": "Shape tool tooltip" + }, + "arrowToolTooltip": { + "message": "箭头工具", + "description": "Arrow tool tooltip" + }, + "imageToolTooltip": { + "message": "图像工具", + "description": "Image tool tooltip" + }, + "undoTooltip": { + "message": "撤销", + "description": "Undo tooltip" + }, + "redoTooltip": { + "message": "重做", + "description": "Redo tooltip" + }, + "clearCanvasTooltip": { + "message": "清空画布", + "description": "Clear canvas tooltip" + }, + "moreColorsTooltip": { + "message": "更多颜色", + "description": "More colors tooltip" + }, + "thickStrokeTooltip": { + "message": "粗画笔", + "description": "Thick stroke tooltip" + }, + "mediumStrokeTooltip": { + "message": "中画笔", + "description": "Medium stroke tooltip" + }, + "thinStrokeTooltip": { + "message": "细画笔", + "description": "Thin stroke tooltip" + }, + "togglePictureinPictureModeTooltip": { + "message": "切换画中画模式", + "description": "Toggle picture-in-picture mode tooltip" + }, + "toggleFillTooltip": { + "message": "切换填充", + "description": "Toggle fill tooltip" + }, + "drawingModeToast": { + "message": "绘图模式", + "description": "Drawing mode toast" + }, + "blurModeToast": { + "message": "模糊模式", + "description": "Blur mode toast" + }, + "clearBlurredElementsTooltip": { + "message": "清除所有模糊元素", + "description": "Clear all blurred elements tooltip" + }, + "highlightClicksTooltip": { + "message": "突出显示点击", + "description": "Highlight clicks tooltip" + }, + "highlightCursorTooltip": { + "message": "突出显示光标", + "description": "Highlight cursor tooltip" + }, + "spotlightCursorTooltip": { + "message": "聚焦光标", + "description": "Spotlight cursor tooltip" + }, + "permissionsModalNoShowAgain": { + "message": "不再显示", + "description": "Permissions modal dismiss button" + }, + "restartModalTitle": { + "message": "确定要重新开始录制吗?", + "description": "Restart recording modal title" + }, + "restartModalDescription": { + "message": "您当前的视频进度将丢失。", + "description": "Restart recording modal description" + }, + "restartModalRestart": { + "message": "重新开始录制", + "description": "Restart recording modal restart button" + }, + "restartModalResume": { + "message": "继续录制", + "description": "Restart recording modal resume button" + }, + "discardModalTitle": { + "message": "确定要放弃录制吗?", + "description": "Discard recording modal title" + }, + "discardModalDescription": { + "message": "您当前的视频进度将丢失。", + "description": "Discard recording modal description" + }, + "discardModalDiscard": { + "message": "放弃录制", + "description": "Discard recording modal discard button" + }, + "discardModalResume": { + "message": "继续录制", + "description": "Discard recording modal resume button" + }, + "recorderSelectTitle": { + "message": "选择要录制的内容", + "description": "Title in recording page" + }, + "recorderSelectProgressTitle": { + "message": "录制中...", + "description": "Title in recording page while recording" + }, + "recorderSelectDescription": { + "message": "保持此选项卡打开。一旦保存录制,它将关闭。", + "description": "Description in recording page" + }, + "sandboxProgressTitle": { + "message": "准备录制中...", + "description": "Title in sandbox page while recording / saving" + }, + "sandboxProgressDescription": { + "message": "保持此选项卡打开。录制/保存完成后,它将更新。", + "description": "Description in sandbox page while recording / saving" + }, + "sandboxEditorMainTitle": { + "message": "编辑器", + "description": "Title in navigation of the sandbox editor page" + }, + "sandboxEditorCancelButton": { + "message": "取消", + "description": "Cancel button in sandbox editor page" + }, + "sandboxEditorRevertButton": { + "message": "恢复原始状态", + "description": "Revert button in sandbox editor page" + }, + "sandboxEditorResetButton": { + "message": "重置", + "description": "Reset button in sandbox editor page" + }, + "sandboxEditorSaveButton": { + "message": "保存更改", + "description": "Save button in sandbox editor page" + }, + "sandboxEditorSaveProgressButton": { + "message": "保存中...", + "description": "Save button in sandbox editor page while saving" + }, + "sandboxAudioDragAndDrop": { + "message": "拖放音频文件", + "description": "Drag and drop audio file in sandbox editor page" + }, + "sandboxAudioOrBrowse": { + "message": "或点击浏览", + "description": "Or click to browse audio file in sandbox editor page" + }, + "sandboxAudioSettingsTitle": { + "message": "设置", + "description": "Audio settings title in sandbox editor page" + }, + "sandboxAudioVolumeLabel": { + "message": "音量", + "description": "Audio volume label in sandbox editor page" + }, + "sandboxAudioUpdateButton": { + "message": "更新", + "description": "Update audio button in sandbox editor page" + }, + "sandboxCropTitle": { + "message": "裁剪", + "description": "Crop title in sandbox editor page" + }, + "widthLabel": { + "message": "宽度", + "description": "Width label for properties" + }, + "heightLabel": { + "message": "高度", + "description": "Height label for properties" + }, + "leftLabel": { + "message": "左", + "description": "Left label for properties" + }, + "topLabel": { + "message": "顶部", + "description": "Top label for properties" + }, + "sandboxEditorTrimInfo": { + "message": "拖动手柄并使用左侧的按钮编辑所选部分。", + "description": "Info about trimming in sandbox editor" + }, + "sandboxEditorTrimButton": { + "message": "修剪视频", + "description": "Trim button in sandbox editor" + }, + "sandboxEditorTrimProgressButton": { + "message": "正在修剪...", + "description": "Trim button in sandbox editor while trimming" + }, + "sandboxEditorCutButton": { + "message": "剪切部分", + "description": "Cut button in sandbox editor" + }, + "sandboxEditorCutProgressButton": { + "message": "正在剪切...", + "description": "Cut button in sandbox editor while cutting" + }, + "sandboxEditorMuteButton": { + "message": "静音音频", + "description": "Mute button in sandbox editor" + }, + "sandboxEditorMuteProgressButton": { + "message": "正在静音...", + "description": "Mute button in sandbox editor while muting" + }, + "learnMoreDot": { + "message": "了解更多。", + "description": "Learn more with a dot" + }, + "undoLabel": { + "message": "撤销", + "description": "Undo label" + }, + "redoLabel": { + "message": "重做", + "description": "Redo label" + }, + "leaveReview": { + "message": "留下评论,这有助于我们!", + "description": "Leave a review button" + }, + "followForUpdates": { + "message": "关注获取更新", + "description": "Follow for updates button" + }, + "offlineLabelTitle": { + "message": "您当前处于离线状态", + "description": "Offline label" + }, + "offlineLabelDescription": { + "message": "某些功能在重新连接之前不可用", + "description": "Offline label description" + }, + "offlineLabelTryAgain": { + "message": "重试", + "description": "Offline label try again button" + }, + "updateChromeLabelTitle": { + "message": "Chrome 需要更新", + "description": "Update Chrome label" + }, + "updateChromeLabelDescription": { + "message": "更新以访问更多功能", + "description": "Update Chrome label description" + }, + "learnMoreLabel": { + "message": "了解更多", + "description": "Learn more button" + }, + "overLimitLabelTitle": { + "message": "視頻過長,無法在本地處理", + "description": "編輯器中超過5分鐘的限制標籤" + }, + "overLimitLabelDescription": { + "message": "編輯和MP4格式導出不可用", + "description": "編輯器中超過5分鐘的限制描述" + }, + "videoProcessingLabelTitle": { + "message": "视频正在处理中...", + "description": "Video processing label in editor" + }, + "videoProcessingLabelDescription": { + "message": "升级以加快编辑速度", + "description": "Video processing description in editor" + }, + "sandboxEditTitle": { + "message": "编辑", + "description": "Edit title in sandbox editor page" + }, + "noConnectionLabel": { + "message": "无连接", + "description": "No connection label" + }, + "notAvailableLabel": { + "message": "不可用", + "description": "Not available label" + }, + "editButtonTitle": { + "message": "编辑视频", + "description": "Trim label button" + }, + "editButtonDescription": { + "message": "剪辑、裁剪或静音视频", + "description": "Trim label" + }, + "preparingLabel": { + "message": "正在准备视频,请稍候...", + "description": "Preparing label" + }, + "cropButtonTitle": { + "message": "裁剪", + "description": "Crop label button" + }, + "cropButtonDescription": { + "message": "裁剪和调整视频大小", + "description": "Crop label" + }, + "addAudioButtonTitle": { + "message": "添加音频", + "description": "Add audio label button" + }, + "addAudioButtonDescription": { + "message": "上传您自己的音频以添加到视频", + "description": "Add audio label" + }, + "sandboxSaveTitle": { + "message": "保存", + "description": "Save title in sandbox editor page" + }, + "signOutDriveLabel": { + "message": "从 Drive 注销", + "description": "Sign out of Google Drive label" + }, + "savingDriveLabel": { + "message": "保存中...", + "description": "Saving to Google Drive label" + }, + "saveDriveButtonTitle": { + "message": "保存到 Drive", + "description": "Save to Google Drive button" + }, + "saveDriveButtonDescription": { + "message": "将当前版本保存到 Google Drive", + "description": "Save to Google Drive label" + }, + "signInDriveLabel": { + "message": "登录并保存到 Drive", + "description": "Sign in to Google Drive label" + }, + "sandboxExportTitle": { + "message": "导出", + "description": "Export title in sandbox editor page" + }, + "downloadingLabel": { + "message": "下载中...", + "description": "Downloading label" + }, + "downloadWEBMButtonTitle": { + "message": "下载为 .webm", + "description": "Download WEBM button" + }, + "downloadWEBMButtonDescription": { + "message": "导出为 .webm 视频", + "description": "Download WEBM label" + }, + "downloadMP4ButtonTitle": { + "message": "下载为 .mp4", + "description": "Download MP4 button" + }, + "downloadMP4ButtonDescription": { + "message": "导出为 .mp4 视频(推荐)", + "description": "Download MP4 label" + }, + "downloadGIFButtonTitle": { + "message": "下载为 .gif", + "description": "Download GIF button" + }, + "downloadGIFButtonDescription": { + "message": "导出为 GIF(最长30秒)", + "description": "Download GIF label" + }, + "shareModalSandboxTitle": { + "message": "与他人分享您的视频", + "description": "Share modal title in sandbox editor page" + }, + "shareModalSandboxDescription": { + "message": "即将推出!留下您的电子邮件以保持更新,并在分享可用时收到通知。", + "description": "Share modal description in sandbox editor page" + }, + "shareModalSandboxButton": { + "message": "加入等待列表", + "description": "Share modal email placeholder in sandbox editor page" + }, + "shareSandboxButton": { + "message": "分享视频", + "description": "Share button in sandbox editor page" + }, + "replaceAudioEditor": { + "message": "替换现有音频", + "description": "Replace audio button in editor" + }, + "zoomToPointPopup": { + "message": "缩放到光标位置", + "description": "Zoom to point popup" + }, + "stayInPagePopup": { + "message": "录制时保持在页面中", + "description": "Stay in page popup" + }, + "micReminderPopup": { + "message": "麦克风已关闭警告", + "description": "Mic reminder popup" + }, + "helpPopup": { + "message": "帮助", + "description": "Help popup button" + }, + "pausedRecordingToast": { + "message": "录制已暂停。按播放按钮继续。", + "description": "Paused recording modal title" + }, + "chromePermissionsModalTitle": { + "message": "MyTechPassport 没有权限录制您的屏幕", + "description": "Permission modal title" + }, + "chromePermissionsModalDescription": { + "message": "为启用屏幕录制,您必须在提示时授予 MyTechPassport 捕获屏幕的权限。", + "description": "Permission modal description" + }, + "chromePermissionsModalAction": { + "message": "启用屏幕录制", + "description": "Permission modal action" + }, + "chromePermissionsModalCancel": { + "message": "取消", + "description": "Permission modal cancel" + }, + "micMutedModalTitle": { + "message": "您的麦克风已静音", + "description": "Microphone muted modal title" + }, + "micMutedModalDescription": { + "message": "要在录制中包含音频,您需要解除麦克风的静音。是否继续不使用音频?", + "description": "Microphone muted modal description" + }, + "micMutedModalAction": { + "message": "是的,继续", + "description": "Microphone muted modal continue" + }, + "micMutedModalCancel": { + "message": "取消", + "description": "Microphone muted modal cancel" + }, + "setupTitle": { + "message": "在三个简单步骤中开始使用MyTechPassport:", + "description": "Set up steps title" + }, + "setupStep1Before": { + "message": "1- 点击 ", + "description": "Set up step 1, before the icon. It needs a space at the end." + }, + "setupStep1After": { + "message": " 扩展图标", + "description": "Set up step 1, after the icon. It needs a space at the beginning." + }, + "setupStep2Before": { + "message": "2- 按下 ", + "description": "Set up step 2, before the icon. It needs a space at the end." + }, + "setupStep2After": { + "message": " 固定图标", + "description": "Set up step 2, after the icon. It needs a space at the beginning." + }, + "setupStep3Before": { + "message": "3- 点击 ", + "description": "Set up step 3, before the icon. It needs a space at the end." + }, + "setupStep3After": { + "message": " MyTechPassport图标以启动", + "description": "Set up step 3, after the icon. It needs a space at the beginning." + }, + "setupCompleteTitle": { + "message": "太棒了!您已经准备好了", + "description": "Set up complete title" + }, + "setupCompleteDescription": { + "message": "您现在可以在这里开始录制,或在任何其他标签中。", + "description": "Set up complete description" + }, + "clickHereDrawOnboarding": { + "message": "单击此处进行绘制", + "description": "Click here onboarding" + }, + "countdownMessage": { + "message": "放松。单击任何地方停止倒计时。", + "description": "Countdown message" + }, + "sandboxEditorTooSmallInfo": { + "message": "由于帧之间的间隔,对于短时间范围,编辑可能不准确。", + "description": "Info about the editor being too small" + }, + "processingBannerEditor": { + "message": "视频正在处理,播放可能不准确或中断。", + "description": "Processing banner in editor" + }, + "croppingInfoTitle": { + "message": "裁剪可能需要一些时间", + "description": "Cropping info title" + }, + "croppingInfoDescription": { + "message": "升级以获得更快的处理速度", + "description": "Cropping info description" + }, + "micOnToast": { + "message": "麦克风已启用", + "description": "Microphone enabled toast title" + }, + "micOffToast": { + "message": "麦克风已禁用", + "description": "Microphone disabled toast title" + }, + "hideUIAlerts": { + "message": "隐藏UI通知", + "description": "Hide UI alerts button" + }, + "noShowAgain": { + "message": "不再显示", + "description": "Don't show again button" + }, + "toolbarHoverOnly": { + "message": "在不使用时隐藏工具栏", + "description": "Only show toolbar on hover button" + }, + "stopRecording": { + "message": "停止錄製", + "description": "Stop recording button in recording screen" + }, + "updateAnnouncementTitle": { + "message": "歡迎使用新版 MyTechPassport!", + "description": "現有用戶的更新公告標題" + }, + "updateAnnouncementDescription": { + "message": "我們進行了設計更新並增加了許多新功能,但請放心,它仍然是您熟悉和喜愛的免費、私密且開源的擴展。", + "description": "現有用戶的更新公告描述" + }, + "updateAnnouncementLearnMore": { + "message": "了解有關更新的更多信息。", + "description": "現有用戶的更新公告了解更多鏈接" + }, + "updateAnnouncementButton": { + "message": "開始使用", + "description": "現有用戶的更新公告按鈕" + }, + "streamErrorModalTitle": { + "message": "啟動錄製時出錯", + "description": "流錯誤模態框標題" + }, + "streamErrorModalDescription": { + "message": "看起來啟動錄製時出現了錯誤。請重新啟動您的瀏覽器並重試。如果問題仍然存在,請通過 support@MyTechPassport.io 與我們聯繫。", + "description": "流錯誤模態框描述" + }, + "highestQuality": { + "message": "最高品質", + "description": "在彈出視窗中切換到最高品質的標籤" + }, + "restoreRecording": { + "message": "還原最近的錄音", + "description": "在彈出視窗中還原最近的錄音按鈕" + }, + "havingIssuesButton": { + "message": "遇到問題了嗎?", + "description": "編輯器中的問題按鈕" + }, + "havingIssuesModalTitle": { + "message": "無法查看您的錄影?", + "description": "編輯器中的問題模式對話框標題" + }, + "havingIssuesModalDescription": { + "message": "如果您已經完成錄製並發現自己在此頁面上看不到您的視頻,您可以嘗試下載原始視頻數據(如果可用)。您還可以聯繫我們並提交錯誤報告。", + "description": "編輯器中的問題模式對話框描述" + }, + "havingIssuesModalButton": { + "message": "下載原始視頻數據", + "description": "編輯器中的問題模式對話框按鈕" + }, + "havingIssuesModalButton2": { + "message": "報告問題", + "description": "編輯器中的問題模式對話框第二個按鈕" + }, + "noRecordingFound": { + "message": "未找到錄製,抱歉 :(", + "description": "編輯器中的未找到錄製警告" + }, + "memoryLimitTitle": { + "message": "記憶體限制達到", + "description": "記憶體限制達到標題" + }, + "memoryLimitDescription": { + "message": "您的設備已經用盡了可用記憶體進行錄製,導致錄製自動停止。如果您想要錄製更長時間,可以嘗試降低視頻質量或清理設備上的一些空間。", + "description": "記憶體限制達到描述" + }, + "understoodButton": { + "message": "知道了", + "description": "知道了按鈕" + }, + "notEnoughSpaceTitle": { + "message": "空間不足", + "description": "空間不足標題" + }, + "notEnoughSpaceDescription": { + "message": "MyTechPassport 需要至少 1GB 的空閒空間進行錄製。請釋放設備上的空間並重試。", + "description": "空間不足描述" + }, + "clearSpaceButton": { + "message": "清除之前的錄製", + "description": "清除之前的錄製按鈕" + }, + "sandboxAdvancedTitle": { + "message": "高級", + "description": "安全編輯器頁面的高級部分" + }, + "rawRecordingButtonTitle": { + "message": "下載原始視頻文件", + "description": "下載原始錄制按鈕" + }, + "rawRecordingButtonDescription": { + "message": "導出原始錄制數據", + "description": "下載原始錄制標籤" + }, + "troubleshootButtonTitle": { + "message": "獲取有關您的錄制的幫助", + "description": "故障排除按鈕" + }, + "troubleShootButtonDescription": { + "message": "恢復您的視頻並解決其他問題", + "description": "故障排除標籤" + }, + "rawRecordingModalTitle": { + "message": "下載原始視頻文件", + "description": "原始錄制模態框標題" + }, + "rawRecordingModalDescription": { + "message": "原始視頻文件是由MyTechPassport錄制的原始視頻文件。此視頻未經處理或編輯,因此可能非常大且可能無法在所有設備上播放。如果您在處理後的視頻方面遇到問題,可以使用此文件恢復您的視頻。", + "description": "原始錄制模態框描述" + }, + "rawRecordingModalButton": { + "message": "下載", + "description": "原始錄制模態框按鈕" + }, + "troubleshootModalTitle": { + "message": "下載系統信息和視頻數據並發送進行故障排除", + "description": "故障排除模態框標題" + }, + "troubleshootModalDescription": { + "message": "下載後,請將文件發送至support@MyTechPassport.io,並附上任何相關信息。我們將使用這些數據來幫助您解決擴展程序的任何問題,並在可能的情況下恢復您的視頻。", + "description": "故障排除模態框描述" + }, + "troubleshootModalButton": { + "message": "下載", + "description": "故障排除模態框按鈕" + }, + "overLimitModalTitle": { + "message": "影片太長,無法在您的設備上處理", + "description": "超過5分鐘限制的模態框標題" + }, + "overLimitModalDescription": { + "message": "由於MyTechPassportsport完全私密且在本地運行,它受到您設備硬件的限制。處理這樣長度的影片需要很長時間,而且資源消耗很大。但您仍然可以下載WEBM文件或原始錄制文件,但無法進行編輯和MP4導出。儘管如此,如果您了解風險,仍然可以嘗試處理該影片。", + "description": "超過5分鐘限制的模態框描述" + }, + "overLimitModalButton": { + "message": "我理解風險,仍然嘗試", + "description": "超過5分鐘限制的模態框按鈕" + }, + "overLimitModalLearnMore": { + "message": "了解有關處理長影片的更多信息。", + "description": "超過5分鐘限制的模態框了解更多鏈接(帶有句號)" + }, + + "recoveryModeTitle": { + "message": "復原模式", + "description": "復原模式標題" + }, + + "downloadForTroubleshootingOption": { + "message": "下載故障排除資料", + "description": "故障排除選項" + }, + "getHelpNav": { + "message": "幫助中心", + "description": "幫助導航元素" + }, + "audioWarningTitle": { + "message": "錄製網頁音訊", + "description": "音訊警告標題" + }, + "audioWarningDescription": { + "message": "要錄製此網頁的音訊,請使用'$tab$'選項。", + "description": "音訊警告說明", + "placeholders": { + "tab": { + "content": "$1", + "example": "選項卡區域" + } + } + }, + "extensionNotSupportedTitle": { + "message": "頁面不支援擴展功能", + "description": "選項卡上不支援擴展功能的標題" + }, + "extensionNotSupportedDescription": { + "message": "MyTechPassport在您之前的選項卡上不受支援。儘管如此,您可以在此開始錄製,然後切換到選項卡,但您的攝像頭和工具欄將不可見。", + "description": "選項卡上不支援擴展功能的說明" + }, + "backupsTitle": { + "message": "為MyTechPassport錄製設定本地備份", + "description": "備份標題" + }, + "backupsDescription1": { + "message": "保留您進行的所有錄製的備份。如果您不設定備份,只有在決定下載它們時才會保存您的錄製。", + "description": "備份說明" + }, + "backupsDescription2": { + "message": "如果您試圖保存到下載或其他系統文件夾,則可能需要首先創建一個新文件夾。", + "description": "備份說明" + }, + "backupsSelectFolder": { + "message": "選擇文件夾", + "description": "選擇文件夾按鈕" + }, + "backupsNotNow": { + "message": "現在不", + "description": "現在不按鈕" + }, + "backupsOnTitle": { + "message": "您的錄製已本地同步", + "description": "已啟用的備份標題" + }, + "backupsOnDescription": { + "message": "為了避免每次錄製時都請求權限,我們建議保持此選項卡打開。", + "description": "已啟用的備份說明" + }, + "backupsClose": { + "message": "仍然關閉選項卡", + "description": "仍然關閉選項卡按鈕" + }, + "backupsStop": { + "message": "停止所有錄製的備份", + "description": "停止備份按鈕" + }, + "backupsConfirmTitle": { + "message": "請重新確認對MyTechPassport本地備份文件夾的訪問權限", + "description": "備份確認標題" + }, + "backupsConfirmDescription": { + "message": "很抱歉,我們需要再次獲得您的許可,以繼續創建您的錄製的本地副本。不幸的是,每次關閉此選項卡時,我們都需要詢問,這可能會在您關閉瀏覽器或重新啟動計算機時發生。", + "description": "備份確認說明" + }, + "backupsConfirmAllow": { + "message": "允許MyTechPassport繼續備份錄製", + "description": "備份確認中的允許按鈕" + }, + "backupsToggle": { + "message": "備份錄製", + "description": "備份切換標籤" + }, + "backupPermissionFailTitle": { + "message": "未授予備份錄製的權限", + "description": "備份權限失敗標題" + }, + "backupPermissionFailDescription": { + "message": "您未選擇要創建您的錄製的本地副本的文件夾。根據瀏覽器或操作系統的版本,每次開始錄製時可能會要求您選擇文件夾。您可以再次嘗試或完全禁用備份,如果您不想重複授予權限。", + "description": "備份權限失敗說明" + }, + "recordAudioWarningMacTitle": { + "message": "錄製計算機音訊", + "description": "macOS音訊警告標題" + }, + "recordAudioWarningMacDescription": { + "message": "在macOS上,您只能錄製選項卡的音訊。請選擇'Chrome選項卡'選項,並確保啟用'同時共享選項卡音訊'選項。", + "description": "macOS音訊警告說明" + }, + "recordAudioWarningOtherTitle": { + "message": "錄製計算機音訊", + "description": "其他系統音訊警告標題" + }, + "recordAudioWarningOtherDescription": { + "message": "如果您想錄製計算機音訊,請確保啟用'共享系統音訊'選項。如果您看不到此選項,請嘗試更新Chrome或切換到選項卡錄製選項。", + "description": "其他系統音訊警告說明" + }, + + "maxResolutionLabel": { + "message": "最高解析度", + "description": "設定選單中的最高解析度標籤" + }, + "maxFPSLabel": { + "message": "最高幀率", + "description": "設定選單中的最高幀率標籤" + }, + "notEnoughRAM": { + "message": "內存不足", + "description": "設置選單中的內存不足標籤" + }, + "resizeWindowLabel": { + "message": "調整視窗大小", + "description": "設定選單中的調整視窗大小標籤" + }, + "screenTooSmallTooltip": { + "message": "螢幕尺寸不足以支援此解析度", + "description": "設定選單中的螢幕尺寸不足提示" + }, + "maxResolutionTooltip": { + "message": "您的設備無法以此解析度錄製", + "description": "設定選單中的最大解析度提示" + }, + "permissionsModalReview": { + "message": "審查權限", + "description": "審查權限按鈕" + } +} diff --git a/build/assets/audio-tab-off.svg b/build/assets/audio-tab-off.svg new file mode 100644 index 0000000..9a97455 --- /dev/null +++ b/build/assets/audio-tab-off.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/build/assets/audio-tab-on.svg b/build/assets/audio-tab-on.svg new file mode 100644 index 0000000..f14a573 --- /dev/null +++ b/build/assets/audio-tab-on.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/build/assets/backgrounds/back1.webp b/build/assets/backgrounds/back1.webp new file mode 100644 index 0000000..927ca01 Binary files /dev/null and b/build/assets/backgrounds/back1.webp differ diff --git a/build/assets/backgrounds/back2.webp b/build/assets/backgrounds/back2.webp new file mode 100644 index 0000000..10c19df Binary files /dev/null and b/build/assets/backgrounds/back2.webp differ diff --git a/build/assets/backgrounds/back3.webp b/build/assets/backgrounds/back3.webp new file mode 100644 index 0000000..b3854ea Binary files /dev/null and b/build/assets/backgrounds/back3.webp differ diff --git a/build/assets/backgrounds/back4.webp b/build/assets/backgrounds/back4.webp new file mode 100644 index 0000000..6dafa74 Binary files /dev/null and b/build/assets/backgrounds/back4.webp differ diff --git a/build/assets/backgrounds/back5.webp b/build/assets/backgrounds/back5.webp new file mode 100644 index 0000000..a9a38b1 Binary files /dev/null and b/build/assets/backgrounds/back5.webp differ diff --git a/build/assets/backgrounds/back6.webp b/build/assets/backgrounds/back6.webp new file mode 100644 index 0000000..98f619d Binary files /dev/null and b/build/assets/backgrounds/back6.webp differ diff --git a/build/assets/backgrounds/blur.webp b/build/assets/backgrounds/blur.webp new file mode 100644 index 0000000..ad32ab3 Binary files /dev/null and b/build/assets/backgrounds/blur.webp differ diff --git a/build/assets/backup-favicon.ico b/build/assets/backup-favicon.ico new file mode 100644 index 0000000..a53e9c3 Binary files /dev/null and b/build/assets/backup-favicon.ico differ diff --git a/build/assets/backup-icon.svg b/build/assets/backup-icon.svg new file mode 100644 index 0000000..a3554e3 --- /dev/null +++ b/build/assets/backup-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/assets/blank.mp4 b/build/assets/blank.mp4 new file mode 100644 index 0000000..d8982b6 Binary files /dev/null and b/build/assets/blank.mp4 differ diff --git a/build/assets/camera-icons/camera-resize.svg b/build/assets/camera-icons/camera-resize.svg new file mode 100644 index 0000000..629bb22 --- /dev/null +++ b/build/assets/camera-icons/camera-resize.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/camera-icons/close.svg b/build/assets/camera-icons/close.svg new file mode 100644 index 0000000..e2b7f0b --- /dev/null +++ b/build/assets/camera-icons/close.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/camera-icons/more.svg b/build/assets/camera-icons/more.svg new file mode 100644 index 0000000..b9fb9e0 --- /dev/null +++ b/build/assets/camera-icons/more.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/camera-icons/pip.svg b/build/assets/camera-icons/pip.svg new file mode 100644 index 0000000..9b83ab5 --- /dev/null +++ b/build/assets/camera-icons/pip.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/camera-icons/video-off.svg b/build/assets/camera-icons/video-off.svg new file mode 100644 index 0000000..b5978fa --- /dev/null +++ b/build/assets/camera-icons/video-off.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/camera-off-blue.svg b/build/assets/camera-off-blue.svg new file mode 100644 index 0000000..65c2add --- /dev/null +++ b/build/assets/camera-off-blue.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/build/assets/camera-off.svg b/build/assets/camera-off.svg new file mode 100644 index 0000000..0cea3fe --- /dev/null +++ b/build/assets/camera-off.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/build/assets/camera-on.svg b/build/assets/camera-on.svg new file mode 100644 index 0000000..0862eef --- /dev/null +++ b/build/assets/camera-on.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/camera-tab-icon-off.svg b/build/assets/camera-tab-icon-off.svg new file mode 100644 index 0000000..026369a --- /dev/null +++ b/build/assets/camera-tab-icon-off.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/build/assets/camera-tab-icon-on.svg b/build/assets/camera-tab-icon-on.svg new file mode 100644 index 0000000..ee96b50 --- /dev/null +++ b/build/assets/camera-tab-icon-on.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/build/assets/camera-tab-icon.svg b/build/assets/camera-tab-icon.svg new file mode 100644 index 0000000..573a355 --- /dev/null +++ b/build/assets/camera-tab-icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/build/assets/canvas/handle.png b/build/assets/canvas/handle.png new file mode 100644 index 0000000..3bdcc5f Binary files /dev/null and b/build/assets/canvas/handle.png differ diff --git a/build/assets/canvas/handle.svg b/build/assets/canvas/handle.svg new file mode 100644 index 0000000..54d5212 --- /dev/null +++ b/build/assets/canvas/handle.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/canvas/middle-handle-v.png b/build/assets/canvas/middle-handle-v.png new file mode 100644 index 0000000..5f329be Binary files /dev/null and b/build/assets/canvas/middle-handle-v.png differ diff --git a/build/assets/canvas/middle-handle.png b/build/assets/canvas/middle-handle.png new file mode 100644 index 0000000..a4cb34d Binary files /dev/null and b/build/assets/canvas/middle-handle.png differ diff --git a/build/assets/canvas/rotate.png b/build/assets/canvas/rotate.png new file mode 100644 index 0000000..616a954 Binary files /dev/null and b/build/assets/canvas/rotate.png differ diff --git a/build/assets/canvas/rotate.svg b/build/assets/canvas/rotate.svg new file mode 100644 index 0000000..666672b --- /dev/null +++ b/build/assets/canvas/rotate.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/assets/check-white.svg b/build/assets/check-white.svg new file mode 100644 index 0000000..4ae1a88 --- /dev/null +++ b/build/assets/check-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/close-icon-popup.svg b/build/assets/close-icon-popup.svg new file mode 100644 index 0000000..e2b7f0b --- /dev/null +++ b/build/assets/close-icon-popup.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/copy-link.svg b/build/assets/copy-link.svg new file mode 100644 index 0000000..d3da25f --- /dev/null +++ b/build/assets/copy-link.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/build/assets/cursors/default.svg b/build/assets/cursors/default.svg new file mode 100644 index 0000000..9109f80 --- /dev/null +++ b/build/assets/cursors/default.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/dropdown-group.svg b/build/assets/dropdown-group.svg new file mode 100644 index 0000000..6c526f6 --- /dev/null +++ b/build/assets/dropdown-group.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/dropdown.svg b/build/assets/dropdown.svg new file mode 100644 index 0000000..ff8ccb0 --- /dev/null +++ b/build/assets/dropdown.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/editor/icons/alert-white.svg b/build/assets/editor/icons/alert-white.svg new file mode 100644 index 0000000..c63776c --- /dev/null +++ b/build/assets/editor/icons/alert-white.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/build/assets/editor/icons/alert.svg b/build/assets/editor/icons/alert.svg new file mode 100644 index 0000000..2f5d0a3 --- /dev/null +++ b/build/assets/editor/icons/alert.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/editor/icons/attachment.svg b/build/assets/editor/icons/attachment.svg new file mode 100644 index 0000000..1d1f7f6 --- /dev/null +++ b/build/assets/editor/icons/attachment.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/editor/icons/audio.svg b/build/assets/editor/icons/audio.svg new file mode 100644 index 0000000..93f42fe --- /dev/null +++ b/build/assets/editor/icons/audio.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/editor/icons/check-white.svg b/build/assets/editor/icons/check-white.svg new file mode 100644 index 0000000..4ae1a88 --- /dev/null +++ b/build/assets/editor/icons/check-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/editor/icons/close-button.svg b/build/assets/editor/icons/close-button.svg new file mode 100644 index 0000000..94ecc7d --- /dev/null +++ b/build/assets/editor/icons/close-button.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/editor/icons/crop.svg b/build/assets/editor/icons/crop.svg new file mode 100644 index 0000000..8c08a49 --- /dev/null +++ b/build/assets/editor/icons/crop.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/build/assets/editor/icons/cross.svg b/build/assets/editor/icons/cross.svg new file mode 100644 index 0000000..3d8584f --- /dev/null +++ b/build/assets/editor/icons/cross.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/editor/icons/download.svg b/build/assets/editor/icons/download.svg new file mode 100644 index 0000000..c9b9b7f --- /dev/null +++ b/build/assets/editor/icons/download.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/editor/icons/drive.svg b/build/assets/editor/icons/drive.svg new file mode 100644 index 0000000..e0c5aa5 --- /dev/null +++ b/build/assets/editor/icons/drive.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/build/assets/editor/icons/dropdown.svg b/build/assets/editor/icons/dropdown.svg new file mode 100644 index 0000000..1b77540 --- /dev/null +++ b/build/assets/editor/icons/dropdown.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/editor/icons/flag.svg b/build/assets/editor/icons/flag.svg new file mode 100644 index 0000000..20ec4ff --- /dev/null +++ b/build/assets/editor/icons/flag.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/editor/icons/gif.svg b/build/assets/editor/icons/gif.svg new file mode 100644 index 0000000..7507b74 --- /dev/null +++ b/build/assets/editor/icons/gif.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/editor/icons/heart.svg b/build/assets/editor/icons/heart.svg new file mode 100644 index 0000000..6602b60 --- /dev/null +++ b/build/assets/editor/icons/heart.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/editor/icons/help-nav.svg b/build/assets/editor/icons/help-nav.svg new file mode 100644 index 0000000..a15c5c9 --- /dev/null +++ b/build/assets/editor/icons/help-nav.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/build/assets/editor/icons/help-small.svg b/build/assets/editor/icons/help-small.svg new file mode 100644 index 0000000..5d7b3c1 --- /dev/null +++ b/build/assets/editor/icons/help-small.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/editor/icons/help.svg b/build/assets/editor/icons/help.svg new file mode 100644 index 0000000..146b7c6 --- /dev/null +++ b/build/assets/editor/icons/help.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/editor/icons/link.svg b/build/assets/editor/icons/link.svg new file mode 100644 index 0000000..fda0b81 --- /dev/null +++ b/build/assets/editor/icons/link.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/build/assets/editor/icons/mute.svg b/build/assets/editor/icons/mute.svg new file mode 100644 index 0000000..82459b6 --- /dev/null +++ b/build/assets/editor/icons/mute.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/editor/icons/no-internet.svg b/build/assets/editor/icons/no-internet.svg new file mode 100644 index 0000000..94d776a --- /dev/null +++ b/build/assets/editor/icons/no-internet.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/editor/icons/pencil.svg b/build/assets/editor/icons/pencil.svg new file mode 100644 index 0000000..d7fc918 --- /dev/null +++ b/build/assets/editor/icons/pencil.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/editor/icons/redo.svg b/build/assets/editor/icons/redo.svg new file mode 100644 index 0000000..51cda9c --- /dev/null +++ b/build/assets/editor/icons/redo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/build/assets/editor/icons/right-arrow.svg b/build/assets/editor/icons/right-arrow.svg new file mode 100644 index 0000000..31754d8 --- /dev/null +++ b/build/assets/editor/icons/right-arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/editor/icons/star.svg b/build/assets/editor/icons/star.svg new file mode 100644 index 0000000..da12666 --- /dev/null +++ b/build/assets/editor/icons/star.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/editor/icons/time.svg b/build/assets/editor/icons/time.svg new file mode 100644 index 0000000..01dd47f --- /dev/null +++ b/build/assets/editor/icons/time.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/build/assets/editor/icons/trash.svg b/build/assets/editor/icons/trash.svg new file mode 100644 index 0000000..a6e5cc7 --- /dev/null +++ b/build/assets/editor/icons/trash.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/editor/icons/trim.svg b/build/assets/editor/icons/trim.svg new file mode 100644 index 0000000..04fdc0e --- /dev/null +++ b/build/assets/editor/icons/trim.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/editor/icons/undo.svg b/build/assets/editor/icons/undo.svg new file mode 100644 index 0000000..f562ba4 --- /dev/null +++ b/build/assets/editor/icons/undo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/build/assets/editor/icons/upload.svg b/build/assets/editor/icons/upload.svg new file mode 100644 index 0000000..c20f945 --- /dev/null +++ b/build/assets/editor/icons/upload.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/editor/icons/youtube.svg b/build/assets/editor/icons/youtube.svg new file mode 100644 index 0000000..49eb7bd --- /dev/null +++ b/build/assets/editor/icons/youtube.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/editor/index.html b/build/assets/editor/index.html new file mode 100644 index 0000000..71aca73 --- /dev/null +++ b/build/assets/editor/index.html @@ -0,0 +1,42 @@ + + + + + + + + + + + React App + + + +
+ + + + + diff --git a/build/assets/editor/logo-text.svg b/build/assets/editor/logo-text.svg new file mode 100644 index 0000000..b5b6775 --- /dev/null +++ b/build/assets/editor/logo-text.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/build/assets/editor/logo.png b/build/assets/editor/logo.png new file mode 100644 index 0000000..19538d7 Binary files /dev/null and b/build/assets/editor/logo.png differ diff --git a/build/assets/editor/logo.svg b/build/assets/editor/logo.svg new file mode 100644 index 0000000..93ee560 --- /dev/null +++ b/build/assets/editor/logo.svg @@ -0,0 +1,19 @@ + + + ve + + + + + + + + + + + + + + + + diff --git a/build/assets/editor/logok.png b/build/assets/editor/logok.png new file mode 100644 index 0000000..5b481d5 Binary files /dev/null and b/build/assets/editor/logok.png differ diff --git a/build/assets/editor/logop.png b/build/assets/editor/logop.png new file mode 100644 index 0000000..9516c5e Binary files /dev/null and b/build/assets/editor/logop.png differ diff --git a/build/assets/editor/logow.png b/build/assets/editor/logow.png new file mode 100644 index 0000000..29c7af0 Binary files /dev/null and b/build/assets/editor/logow.png differ diff --git a/build/assets/editor/record-tab-active.svg b/build/assets/editor/record-tab-active.svg new file mode 100644 index 0000000..593f2f7 --- /dev/null +++ b/build/assets/editor/record-tab-active.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/editor/transparenttile.png b/build/assets/editor/transparenttile.png new file mode 100644 index 0000000..7e5dd85 Binary files /dev/null and b/build/assets/editor/transparenttile.png differ diff --git a/build/assets/editor/transparenttile.svg b/build/assets/editor/transparenttile.svg new file mode 100644 index 0000000..e6646f0 --- /dev/null +++ b/build/assets/editor/transparenttile.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/build/assets/emailTut.png b/build/assets/emailTut.png new file mode 100644 index 0000000..62afcf1 Binary files /dev/null and b/build/assets/emailTut.png differ diff --git a/build/assets/fonts/ClashDisplay-Variable.ttf b/build/assets/fonts/ClashDisplay-Variable.ttf new file mode 100644 index 0000000..24f060c Binary files /dev/null and b/build/assets/fonts/ClashDisplay-Variable.ttf differ diff --git a/build/assets/fonts/GloriaHallelujah-Regular.ttf b/build/assets/fonts/GloriaHallelujah-Regular.ttf new file mode 100644 index 0000000..82d3874 Binary files /dev/null and b/build/assets/fonts/GloriaHallelujah-Regular.ttf differ diff --git a/build/assets/fonts/JuraMedium.ttf b/build/assets/fonts/JuraMedium.ttf new file mode 100644 index 0000000..65a970a Binary files /dev/null and b/build/assets/fonts/JuraMedium.ttf differ diff --git a/build/assets/fonts/Satoshi-Black.ttf b/build/assets/fonts/Satoshi-Black.ttf new file mode 100644 index 0000000..62015ac Binary files /dev/null and b/build/assets/fonts/Satoshi-Black.ttf differ diff --git a/build/assets/fonts/Satoshi-BlackItalic.ttf b/build/assets/fonts/Satoshi-BlackItalic.ttf new file mode 100644 index 0000000..74410b9 Binary files /dev/null and b/build/assets/fonts/Satoshi-BlackItalic.ttf differ diff --git a/build/assets/fonts/Satoshi-Bold.ttf b/build/assets/fonts/Satoshi-Bold.ttf new file mode 100644 index 0000000..00bc985 Binary files /dev/null and b/build/assets/fonts/Satoshi-Bold.ttf differ diff --git a/build/assets/fonts/Satoshi-BoldItalic.ttf b/build/assets/fonts/Satoshi-BoldItalic.ttf new file mode 100644 index 0000000..24f012c Binary files /dev/null and b/build/assets/fonts/Satoshi-BoldItalic.ttf differ diff --git a/build/assets/fonts/Satoshi-Italic.ttf b/build/assets/fonts/Satoshi-Italic.ttf new file mode 100644 index 0000000..c214f4f Binary files /dev/null and b/build/assets/fonts/Satoshi-Italic.ttf differ diff --git a/build/assets/fonts/Satoshi-Light.ttf b/build/assets/fonts/Satoshi-Light.ttf new file mode 100644 index 0000000..b41a2d4 Binary files /dev/null and b/build/assets/fonts/Satoshi-Light.ttf differ diff --git a/build/assets/fonts/Satoshi-LightItalic.ttf b/build/assets/fonts/Satoshi-LightItalic.ttf new file mode 100644 index 0000000..08f5db5 Binary files /dev/null and b/build/assets/fonts/Satoshi-LightItalic.ttf differ diff --git a/build/assets/fonts/Satoshi-Medium.ttf b/build/assets/fonts/Satoshi-Medium.ttf new file mode 100644 index 0000000..ab149b7 Binary files /dev/null and b/build/assets/fonts/Satoshi-Medium.ttf differ diff --git a/build/assets/fonts/Satoshi-MediumItalic.ttf b/build/assets/fonts/Satoshi-MediumItalic.ttf new file mode 100644 index 0000000..387f278 Binary files /dev/null and b/build/assets/fonts/Satoshi-MediumItalic.ttf differ diff --git a/build/assets/fonts/Satoshi-Regular.ttf b/build/assets/fonts/Satoshi-Regular.ttf new file mode 100644 index 0000000..fe85cd6 Binary files /dev/null and b/build/assets/fonts/Satoshi-Regular.ttf differ diff --git a/build/assets/fonts/fonts.css b/build/assets/fonts/fonts.css new file mode 100644 index 0000000..9c0f4a5 --- /dev/null +++ b/build/assets/fonts/fonts.css @@ -0,0 +1,39 @@ +@font-face { + font-family: Satoshi-Light; + src: url(chrome-extension://__MSG_@@extension_id__/assets/fonts/Satoshi-Light.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: Satoshi-Medium; + src: url(chrome-extension://__MSG_@@extension_id__/assets/fonts/Satoshi-Medium.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: Satoshi-Bold; + src: url(chrome-extension://__MSG_@@extension_id__/assets/fonts/Satoshi-Bold.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: Gloria-Hallelujah; + src: url(chrome-extension://__MSG_@@extension_id__/assets/fonts/GloriaHallelujah-Regular.ttf) format('truetype'); +} + +@font-face { + font-family: 'ClashDisplay'; + src: url(chrome-extension://__MSG_@@extension_id__/assets/fonts/ClashDisplay-Variable.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'Jura'; + src: url(chrome-extension://__MSG_@@extension_id__/assets/fonts/JuraMedium.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} diff --git a/build/assets/grab-icon-popup.svg b/build/assets/grab-icon-popup.svg new file mode 100644 index 0000000..5f7b05a --- /dev/null +++ b/build/assets/grab-icon-popup.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/helper/backup.png b/build/assets/helper/backup.png new file mode 100644 index 0000000..748baaa Binary files /dev/null and b/build/assets/helper/backup.png differ diff --git a/build/assets/helper/hero.png b/build/assets/helper/hero.png new file mode 100644 index 0000000..ce63214 Binary files /dev/null and b/build/assets/helper/hero.png differ diff --git a/build/assets/helper/mini-screenity.png b/build/assets/helper/mini-screenity.png new file mode 100644 index 0000000..4291e4b Binary files /dev/null and b/build/assets/helper/mini-screenity.png differ diff --git a/build/assets/helper/onboarding-arrow.svg b/build/assets/helper/onboarding-arrow.svg new file mode 100644 index 0000000..4710f23 --- /dev/null +++ b/build/assets/helper/onboarding-arrow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/helper/pattern-svg.svg b/build/assets/helper/pattern-svg.svg new file mode 100644 index 0000000..f50c4c6 --- /dev/null +++ b/build/assets/helper/pattern-svg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/build/assets/helper/permissions.webp b/build/assets/helper/permissions.webp new file mode 100644 index 0000000..1fc915c Binary files /dev/null and b/build/assets/helper/permissions.webp differ diff --git a/build/assets/helper/pin.gif b/build/assets/helper/pin.gif new file mode 100644 index 0000000..83863f3 Binary files /dev/null and b/build/assets/helper/pin.gif differ diff --git a/build/assets/helper/pin.png b/build/assets/helper/pin.png new file mode 100644 index 0000000..fd371e3 Binary files /dev/null and b/build/assets/helper/pin.png differ diff --git a/build/assets/helper/pin.svg b/build/assets/helper/pin.svg new file mode 100644 index 0000000..73af1b5 --- /dev/null +++ b/build/assets/helper/pin.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/build/assets/helper/puzzle.svg b/build/assets/helper/puzzle.svg new file mode 100644 index 0000000..e033f1d --- /dev/null +++ b/build/assets/helper/puzzle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/assets/icok-128.png b/build/assets/icok-128.png new file mode 100644 index 0000000..84851f7 Binary files /dev/null and b/build/assets/icok-128.png differ diff --git a/build/assets/icon-128.png b/build/assets/icon-128.png new file mode 100644 index 0000000..19538d7 Binary files /dev/null and b/build/assets/icon-128.png differ diff --git a/build/assets/icon-304.png b/build/assets/icon-304.png new file mode 100644 index 0000000..5b481d5 Binary files /dev/null and b/build/assets/icon-304.png differ diff --git a/build/assets/icon-34.png b/build/assets/icon-34.png new file mode 100644 index 0000000..269243c Binary files /dev/null and b/build/assets/icon-34.png differ diff --git a/build/assets/iconn-128.png b/build/assets/iconn-128.png new file mode 100644 index 0000000..dcbc4df Binary files /dev/null and b/build/assets/iconn-128.png differ diff --git a/build/assets/iconn-34.png b/build/assets/iconn-34.png new file mode 100644 index 0000000..c7ad7b8 Binary files /dev/null and b/build/assets/iconn-34.png differ diff --git a/build/assets/iconw-128.png b/build/assets/iconw-128.png new file mode 100644 index 0000000..29c7af0 Binary files /dev/null and b/build/assets/iconw-128.png differ diff --git a/build/assets/iconw-34.png b/build/assets/iconw-34.png new file mode 100644 index 0000000..36b51ab Binary files /dev/null and b/build/assets/iconw-34.png differ diff --git a/build/assets/img/icon-128.png b/build/assets/img/icon-128.png new file mode 100644 index 0000000..19538d7 Binary files /dev/null and b/build/assets/img/icon-128.png differ diff --git a/build/assets/img/icon-1289.png b/build/assets/img/icon-1289.png new file mode 100644 index 0000000..84851f7 Binary files /dev/null and b/build/assets/img/icon-1289.png differ diff --git a/build/assets/img/icon-34.png b/build/assets/img/icon-34.png new file mode 100644 index 0000000..269243c Binary files /dev/null and b/build/assets/img/icon-34.png differ diff --git a/build/assets/img/icon-340.png b/build/assets/img/icon-340.png new file mode 100644 index 0000000..5b481d5 Binary files /dev/null and b/build/assets/img/icon-340.png differ diff --git a/build/assets/img/iconn-128.png b/build/assets/img/iconn-128.png new file mode 100644 index 0000000..dcbc4df Binary files /dev/null and b/build/assets/img/iconn-128.png differ diff --git a/build/assets/img/iconn-34.png b/build/assets/img/iconn-34.png new file mode 100644 index 0000000..c7ad7b8 Binary files /dev/null and b/build/assets/img/iconn-34.png differ diff --git a/build/assets/img/iconw-128.png b/build/assets/img/iconw-128.png new file mode 100644 index 0000000..29c7af0 Binary files /dev/null and b/build/assets/img/iconw-128.png differ diff --git a/build/assets/img/iconw-34.png b/build/assets/img/iconw-34.png new file mode 100644 index 0000000..36b51ab Binary files /dev/null and b/build/assets/img/iconw-34.png differ diff --git a/build/assets/img/logo.svg b/build/assets/img/logo.svg new file mode 100644 index 0000000..b5b6775 --- /dev/null +++ b/build/assets/img/logo.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/build/assets/loading-camera.svg b/build/assets/loading-camera.svg new file mode 100644 index 0000000..e89eaab --- /dev/null +++ b/build/assets/loading-camera.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/assets/logo-text.svg b/build/assets/logo-text.svg new file mode 100644 index 0000000..b5b6775 --- /dev/null +++ b/build/assets/logo-text.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/build/assets/logo.png b/build/assets/logo.png new file mode 100644 index 0000000..36b51ab Binary files /dev/null and b/build/assets/logo.png differ diff --git a/build/assets/logok.png b/build/assets/logok.png new file mode 100644 index 0000000..5b481d5 Binary files /dev/null and b/build/assets/logok.png differ diff --git a/build/assets/logon.png b/build/assets/logon.png new file mode 100644 index 0000000..9e13ae3 Binary files /dev/null and b/build/assets/logon.png differ diff --git a/build/assets/mic-off-blue.svg b/build/assets/mic-off-blue.svg new file mode 100644 index 0000000..9880700 --- /dev/null +++ b/build/assets/mic-off-blue.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/build/assets/mic-off.svg b/build/assets/mic-off.svg new file mode 100644 index 0000000..bc8e354 --- /dev/null +++ b/build/assets/mic-off.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/build/assets/mic-on.svg b/build/assets/mic-on.svg new file mode 100644 index 0000000..eab6fc5 --- /dev/null +++ b/build/assets/mic-on.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/build/assets/mockup-tab-off.svg b/build/assets/mockup-tab-off.svg new file mode 100644 index 0000000..b165b8b --- /dev/null +++ b/build/assets/mockup-tab-off.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/mockup-tab-on.svg b/build/assets/mockup-tab-on.svg new file mode 100644 index 0000000..201070e --- /dev/null +++ b/build/assets/mockup-tab-on.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/more-actions.svg b/build/assets/more-actions.svg new file mode 100644 index 0000000..024e0cd --- /dev/null +++ b/build/assets/more-actions.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/assets/more-icon-popup.svg b/build/assets/more-icon-popup.svg new file mode 100644 index 0000000..ec09828 --- /dev/null +++ b/build/assets/more-icon-popup.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/mtp-black-gold.svg b/build/assets/mtp-black-gold.svg new file mode 100644 index 0000000..b5b6775 --- /dev/null +++ b/build/assets/mtp-black-gold.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/build/assets/mtp-logo-black.svg b/build/assets/mtp-logo-black.svg new file mode 100644 index 0000000..7efd483 --- /dev/null +++ b/build/assets/mtp-logo-black.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/build/assets/mtp-logo-horizontal-black.svg b/build/assets/mtp-logo-horizontal-black.svg new file mode 100644 index 0000000..3d3f406 --- /dev/null +++ b/build/assets/mtp-logo-horizontal-black.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/assets/mtp-logo-horizontal-white.svg b/build/assets/mtp-logo-horizontal-white.svg new file mode 100644 index 0000000..0bcd7e9 --- /dev/null +++ b/build/assets/mtp-logo-horizontal-white.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/assets/mtp-logo-white.svg b/build/assets/mtp-logo-white.svg new file mode 100644 index 0000000..35c2a4f --- /dev/null +++ b/build/assets/mtp-logo-white.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/build/assets/mtp-pwa-square-gold-logo.svg b/build/assets/mtp-pwa-square-gold-logo.svg new file mode 100644 index 0000000..61f5465 --- /dev/null +++ b/build/assets/mtp-pwa-square-gold-logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/build/assets/mtp-pwa-white-gold-logo.svg b/build/assets/mtp-pwa-white-gold-logo.svg new file mode 100644 index 0000000..7c59b4e --- /dev/null +++ b/build/assets/mtp-pwa-white-gold-logo.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/build/assets/pfp.png b/build/assets/pfp.png new file mode 100644 index 0000000..f31f8a1 Binary files /dev/null and b/build/assets/pfp.png differ diff --git a/build/assets/pip-mode.svg b/build/assets/pip-mode.svg new file mode 100644 index 0000000..245380b --- /dev/null +++ b/build/assets/pip-mode.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/build/assets/plyr.svg b/build/assets/plyr.svg new file mode 100644 index 0000000..62ab257 --- /dev/null +++ b/build/assets/plyr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/build/assets/record-tab-active.png b/build/assets/record-tab-active.png new file mode 100644 index 0000000..600ed49 Binary files /dev/null and b/build/assets/record-tab-active.png differ diff --git a/build/assets/record-tab-active.svg b/build/assets/record-tab-active.svg new file mode 100644 index 0000000..03ddb8f --- /dev/null +++ b/build/assets/record-tab-active.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/record-tab-inactive.svg b/build/assets/record-tab-inactive.svg new file mode 100644 index 0000000..d4956bc --- /dev/null +++ b/build/assets/record-tab-inactive.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/recording-logo.png b/build/assets/recording-logo.png new file mode 100644 index 0000000..abf5e40 Binary files /dev/null and b/build/assets/recording-logo.png differ diff --git a/build/assets/region-tab-off.svg b/build/assets/region-tab-off.svg new file mode 100644 index 0000000..d380497 --- /dev/null +++ b/build/assets/region-tab-off.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/region-tab-on.svg b/build/assets/region-tab-on.svg new file mode 100644 index 0000000..929af67 --- /dev/null +++ b/build/assets/region-tab-on.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/satoshi.css b/build/assets/satoshi.css new file mode 100644 index 0000000..c7faaa7 --- /dev/null +++ b/build/assets/satoshi.css @@ -0,0 +1,178 @@ +/** + * @license + * + * Font Family: Satoshi + * Designed by: Deni Anggara + * URL: https://www.fontshare.com/fonts/satoshi + * © 2023 Indian Type Foundry + * + * Font Styles: + * Satoshi Variable(Variable font) + * Satoshi Variable Italic(Variable font) + * Satoshi Light + * Satoshi Light Italic + * Satoshi Regular + * Satoshi Italic + * Satoshi Medium + * Satoshi Medium Italic + * Satoshi Bold + * Satoshi Bold Italic + * Satoshi Black + * Satoshi Black Italic + * +*/ + + +/** +* This is a variable font +* You can controll variable axes as shown below: +* font-variation-settings: 'wght' 900.0; +* +* available axes: + +* 'wght' (range from 300.0 to 900.0) + +*/ + +@font-face { + font-family: 'Satoshi-Variable'; + src: url('../fonts/Satoshi-Variable.woff2') format('woff2'), + url('../fonts/Satoshi-Variable.woff') format('woff'), + url('../fonts/Satoshi-Variable.ttf') format('truetype'); + font-weight: 300 900; + font-display: swap; + font-style: normal; +} + + +/** +* This is a variable font +* You can controll variable axes as shown below: +* font-variation-settings: 'wght' 900.0; +* +* available axes: + +* 'wght' (range from 300.0 to 900.0) + +*/ + +@font-face { + font-family: 'Satoshi-VariableItalic'; + src: url('../fonts/Satoshi-VariableItalic.woff2') format('woff2'), + url('../fonts/Satoshi-VariableItalic.woff') format('woff'), + url('../fonts/Satoshi-VariableItalic.ttf') format('truetype'); + font-weight: 300 900; + font-display: swap; + font-style: italic; +} + + +@font-face { + font-family: 'Satoshi-Light'; + src: url('../fonts/Satoshi-Light.woff2') format('woff2'), + url('../fonts/Satoshi-Light.woff') format('woff'), + url('../fonts/Satoshi-Light.ttf') format('truetype'); + font-weight: 300; + font-display: swap; + font-style: normal; +} + + +@font-face { + font-family: 'Satoshi-LightItalic'; + src: url('../fonts/Satoshi-LightItalic.woff2') format('woff2'), + url('../fonts/Satoshi-LightItalic.woff') format('woff'), + url('../fonts/Satoshi-LightItalic.ttf') format('truetype'); + font-weight: 300; + font-display: swap; + font-style: italic; +} + + +@font-face { + font-family: 'Satoshi-Regular'; + src: url('../fonts/Satoshi-Regular.woff2') format('woff2'), + url('../fonts/Satoshi-Regular.woff') format('woff'), + url('../fonts/Satoshi-Regular.ttf') format('truetype'); + font-weight: 400; + font-display: swap; + font-style: normal; +} + + +@font-face { + font-family: 'Satoshi-Italic'; + src: url('../fonts/Satoshi-Italic.woff2') format('woff2'), + url('../fonts/Satoshi-Italic.woff') format('woff'), + url('../fonts/Satoshi-Italic.ttf') format('truetype'); + font-weight: 400; + font-display: swap; + font-style: italic; +} + + +@font-face { + font-family: 'Satoshi-Medium'; + src: url('../fonts/Satoshi-Medium.woff2') format('woff2'), + url('../fonts/Satoshi-Medium.woff') format('woff'), + url('../fonts/Satoshi-Medium.ttf') format('truetype'); + font-weight: 500; + font-display: swap; + font-style: normal; +} + + +@font-face { + font-family: 'Satoshi-MediumItalic'; + src: url('../fonts/Satoshi-MediumItalic.woff2') format('woff2'), + url('../fonts/Satoshi-MediumItalic.woff') format('woff'), + url('../fonts/Satoshi-MediumItalic.ttf') format('truetype'); + font-weight: 500; + font-display: swap; + font-style: italic; +} + + +@font-face { + font-family: 'Satoshi-Bold'; + src: url('../fonts/Satoshi-Bold.woff2') format('woff2'), + url('../fonts/Satoshi-Bold.woff') format('woff'), + url('../fonts/Satoshi-Bold.ttf') format('truetype'); + font-weight: 700; + font-display: swap; + font-style: normal; +} + + +@font-face { + font-family: 'Satoshi-BoldItalic'; + src: url('../fonts/Satoshi-BoldItalic.woff2') format('woff2'), + url('../fonts/Satoshi-BoldItalic.woff') format('woff'), + url('../fonts/Satoshi-BoldItalic.ttf') format('truetype'); + font-weight: 700; + font-display: swap; + font-style: italic; +} + + +@font-face { + font-family: 'Satoshi-Black'; + src: url('../fonts/Satoshi-Black.woff2') format('woff2'), + url('../fonts/Satoshi-Black.woff') format('woff'), + url('../fonts/Satoshi-Black.ttf') format('truetype'); + font-weight: 900; + font-display: swap; + font-style: normal; +} + + +@font-face { + font-family: 'Satoshi-BlackItalic'; + src: url('../fonts/Satoshi-BlackItalic.woff2') format('woff2'), + url('../fonts/Satoshi-BlackItalic.woff') format('woff'), + url('../fonts/Satoshi-BlackItalic.ttf') format('truetype'); + font-weight: 900; + font-display: swap; + font-style: italic; +} + diff --git a/build/assets/screen-tab-off.svg b/build/assets/screen-tab-off.svg new file mode 100644 index 0000000..b2339af --- /dev/null +++ b/build/assets/screen-tab-off.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/assets/screen-tab-on.svg b/build/assets/screen-tab-on.svg new file mode 100644 index 0000000..69fe19a --- /dev/null +++ b/build/assets/screen-tab-on.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/assets/selfieSegmentation.js b/build/assets/selfieSegmentation.js new file mode 100644 index 0000000..e8e11ec --- /dev/null +++ b/build/assets/selfieSegmentation.js @@ -0,0 +1 @@ +(function(){"use strict";var t;function e(t){var e=0;return function(){return e>>0)+"_",i=0;return function t(r){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(n+(r||"")+"_"+i++,r)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;ae&&(e=Math.max(0,n+e)),(null==r||r>n)&&(r=n),0>(r=Number(r))&&(r=Math.max(0,n+r)),e=Number(e||0);e(e=e||0)&&(e=Math.max(e+n,0));e>4),64!=a&&(e(o<<4&240|a>>2),64!=u&&e(a<<6&192|u))}}(t,(function(t){n[i++]=t})),i!==r?n.subarray(0,i):n}function U(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],r=0;5>r;r++){var n=t.concat(e[r].split(""));_[r]=n;for(var i=0;i>2];a=e[(3&a)<<4|u>>4],u=e[(15&u)<<2|s>>6],s=e[63&s],r[o++]=f+a+u+s}switch(f=0,s=n,t.length-i){case 2:s=e[(15&(f=t[i+1]))<<2]||n;case 1:t=t[i],r[o]=e[t>>2]+e[(3&t)<<4|f>>4]+s+n}return r.join("")}for(e="";10240t,r=(t=Math.abs(t))>>>0;t=Math.floor((t-r)/4294967296),e&&(e=(r=a(J(r,t))).next().value,t=r.next().value,r=e),V=r>>>0,W=t>>>0}var X,Y="function"==typeof BigInt;function J(t,e){return e=~e,t?t=1+~t:e+=1,[t,e]}function K(t,e){this.i=t>>>0,this.h=e>>>0}function Z(t){if(!t)return X||(X=new K(0,0));if(!/^-?\d+$/.test(t))return null;if(16>t.length)H(Number(t));else if(Y)t=BigInt(t),V=Number(t&BigInt(4294967295))>>>0,W=Number(t>>BigInt(32)&BigInt(4294967295));else{var e=+("-"===t[0]);W=V=0;for(var r=t.length,n=e,i=(r-e)%6+e;i<=r;n=i,i+=6)n=Number(t.slice(n,i)),W*=1e6,4294967296<=(V=1e6*V+n)&&(W+=V/4294967296|0,V%=4294967296);e&&(t=(e=a(J(V,W))).next().value,e=e.next().value,V=t,W=e)}return new K(V,W)}function q(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function $(){return Error("Failed to read varint, encoding is invalid.")}function Q(t,e){return Error("Tried to read past the end of the data "+e+" > "+t)}function tt(){throw Error("Invalid UTF8")}function et(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var rt,nt,it,ot=void 0,at="undefined"!=typeof TextDecoder,ut="undefined"!=typeof TextEncoder;function st(t){if(t!==G)throw Error("illegal external caller")}function ft(t,e){if(st(e),this.V=t,null!=t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}function lt(){return it||(it=new ft(null,G))}function ht(t){st(G);var e=t.V;return null==(e=null==e||C&&null!=e&&e instanceof Uint8Array?e:"string"==typeof e?N(e):null)?e:t.V=e}function ct(t,e){this.i=null,this.m=!1,this.h=this.j=this.l=0,pt(this,t,e)}function pt(t,e,r){r=void 0===r?{}:r,t.S=void 0!==r.S&&r.S,e&&(e=function(t){if("string"==typeof t)return{buffer:N(t),C:!1};if(Array.isArray(t))return{buffer:new Uint8Array(t),C:!1};if(t.constructor===Uint8Array)return{buffer:t,C:!1};if(t.constructor===ArrayBuffer)return{buffer:new Uint8Array(t),C:!1};if(t.constructor===ft)return{buffer:ht(t)||D(),C:!0};if(t instanceof Uint8Array)return{buffer:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),C:!1};throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, a ByteString or an Array of numbers")}(e),t.i=e.buffer,t.m=e.C,t.l=0,t.j=t.i.length,t.h=t.l)}function vt(t,e){if(t.h=e,e>t.j)throw Q(t.j,e)}function dt(t){var e=t.i,r=t.h,n=e[r++],i=127&n;if(128&n&&(i|=(127&(n=e[r++]))<<7,128&n&&(i|=(127&(n=e[r++]))<<14,128&n&&(i|=(127&(n=e[r++]))<<21,128&n&&(i|=(n=e[r++])<<28,128&n&&128&e[r++]&&128&e[r++]&&128&e[r++]&&128&e[r++]&&128&e[r++])))))throw $();return vt(t,r),i}function yt(t,e){if(0>e)throw Error("Tried to read a negative byte length: "+e);var r=t.h,n=r+e;if(n>t.j)throw Q(e,t.j-r);return t.h=n,r}ct.prototype.reset=function(){this.h=this.l};var gt=[];function mt(){this.h=[]}function bt(t,e,r){for(;0>>7|r<<25)>>>0,r>>>=7;t.h.push(e)}function wt(t,e){for(;127>>=7;t.h.push(e)}function At(t,e){if(gt.length){var r=gt.pop();pt(r,t,e),t=r}else t=new ct(t,e);this.h=t,this.j=this.h.h,this.i=this.l=-1,this.setOptions(e)}function jt(t){var e=t.h;if(e.h==e.j)return!1;t.j=t.h.h;var r=dt(t.h)>>>0;if(e=r>>>3,!(0<=(r&=7)&&5>=r))throw q(r,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.l=e,t.i=r,!0}function xt(t){switch(t.i){case 0:if(0!=t.i)xt(t);else t:{for(var e=(t=t.h).h,r=e+10,n=t.i;e>>0,vt(t=t.h,t.h+e));break;case 5:vt(t=t.h,t.h+4);break;case 3:for(e=t.l;;){if(!jt(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.i){if(t.l!=e)throw Error("Unmatched end-group tag");break}xt(t)}break;default:throw q(t.i,t.j)}}mt.prototype.length=function(){return this.h.length},mt.prototype.end=function(){var t=this.h;return this.h=[],t},At.prototype.setOptions=function(t){t=void 0===t?{}:t,this.ca=void 0!==t.ca&&t.ca},At.prototype.reset=function(){this.h.reset(),this.j=this.h.h,this.i=this.l=-1};var Et=[];function Ot(){this.j=[],this.i=0,this.h=new mt}function Ft(t,e){0!==e.length&&(t.j.push(e),t.i+=e.length)}var St="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol():void 0;function Tt(t,e){return St?t[St]|=e:void 0!==t.A?t.A|=e:(Object.defineProperties(t,{A:{value:e,configurable:!0,writable:!0,enumerable:!1}}),e)}function _t(t,e){St?t[St]&&(t[St]&=~e):void 0!==t.A&&(t.A&=~e)}function kt(t){var e;return null==(e=St?t[St]:t.A)?0:e}function Rt(t,e){St?t[St]=e:void 0!==t.A?t.A=e:Object.defineProperties(t,{A:{value:e,configurable:!0,writable:!0,enumerable:!1}})}function Ut(t){return Tt(t,1),t}function Ct(t,e){Rt(e,-51&(0|t))}function Pt(t,e){Rt(e,-41&(18|t))}var Bt={};function Mt(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var It,Lt,Nt=[];function Dt(t){if(2&kt(t.o))throw Error("Cannot mutate an immutable Message")}function Gt(t){var e=t.length;(e=e?t[e-1]:void 0)&&Mt(e)?e.g=1:(e={},t.push((e.g=1,e)))}function zt(t){var e=t.i+t.G;return t.B||(t.B=t.o[e]={})}function Vt(t,e){return-1===e?null:e>=t.i?t.B?t.B[e]:void 0:t.o[e+t.G]}function Wt(t,e,r,n){Dt(t),Ht(t,e,r,n)}function Ht(t,e,r,n){t.j&&(t.j=void 0),e>=t.i||n?zt(t)[e]=r:(t.o[e+t.G]=r,(t=t.B)&&e in t&&delete t[e])}function Xt(t,e,r,n){var i=Vt(t,e);Array.isArray(i)||(i=It);var o=kt(i);if(1&o||Ut(i),n)2&o||Tt(i,2),1&r||Object.freeze(i);else{n=!(2&r);var a=2&o;1&r||!a?n&&16&o&&!a&&_t(i,16):Ht(t,e,i=Ut(Array.prototype.slice.call(i)))}return i}function Yt(t,e){var r=Vt(t,e),n=null==r?r:"number"==typeof r||"NaN"===r||"Infinity"===r||"-Infinity"===r?Number(r):void 0;return null!=n&&n!==r&&Ht(t,e,n),n}function Jt(t,e,r,n,i){t.h||(t.h={});var o=t.h[r],a=Xt(t,r,3,i);if(!o){var u=a;o=[];var s=!!(16&kt(t.o));a=!!(2&kt(u));var f=u;!i&&a&&(u=Array.prototype.slice.call(u));for(var l=a,h=0;ha&&"number"!=typeof t[a]){var u=t[a++];r(e,u)}for(;a>>0)>>31)+1,o=a>>>23&255,a&=8388607,Wt(e,r,255==o?a?NaN:1/0*t:0==o?t*Math.pow(2,-149)*a:t*Math.pow(2,o-150)*(a+Math.pow(2,23))),!0}),(function(t,e,r){if(null!=(e=Yt(e,r))){wt(t.h,8*r+5),t=t.h;var n=+e;0===n?0<1/n?V=W=0:(W=0,V=2147483648):isNaN(n)?(W=0,V=2147483647):34028234663852886e22<(n=(r=0>n?-2147483648:0)?-n:n)?(W=0,V=(2139095040|r)>>>0):11754943508222875e-54>n?(n=Math.round(n/Math.pow(2,-149)),W=0,V=(r|n)>>>0):(e=Math.floor(Math.log(n)/Math.LN2),n*=Math.pow(2,-e),16777216<=(n=Math.round(8388608*n))&&++e,W=0,V=(r|e+127<<23|8388607&n)>>>0),r=V,t.h.push(r>>>0&255),t.h.push(r>>>8&255),t.h.push(r>>>16&255),t.h.push(r>>>24&255)}})),Me=Pe((function(t,e,r){if(0!==t.i)return!1;var n=t.h,i=0,o=t=0,a=n.i,u=n.h;do{var s=a[u++];i|=(127&s)<o&&128&s);for(32>4),o=3;32>o&&128&s;o+=7)t|=(127&(s=a[u++]))<s))throw $();return n=i>>>0,(t=2147483648&(s=t>>>0))&&(s=~s>>>0,0==(n=1+~n>>>0)&&(s=s+1>>>0)),n=4294967296*s+(n>>>0),Wt(e,r,t?-n:n),!0}),(function(t,e,r){null!=(e=Vt(e,r))&&("string"==typeof e&&Z(e),null!=e&&(wt(t.h,8*r),"number"==typeof e?(t=t.h,H(e),bt(t,V,W)):(r=Z(e),bt(t.h,r.i,r.h))))})),Ie=Pe((function(t,e,r){return 0===t.i&&(Wt(e,r,dt(t.h)),!0)}),(function(t,e,r){if(null!=(e=Vt(e,r))&&null!=e)if(wt(t.h,8*r),t=t.h,0<=(r=e))wt(t,r);else{for(e=0;9>e;e++)t.h.push(127&r|128),r>>=7;t.h.push(1)}})),Le=Pe((function(t,e,r){if(2!==t.i)return!1;var n=dt(t.h)>>>0,i=yt(t=t.h,n);if(t=t.i,at){var o,a=t;(o=rt)||(o=rt=new TextDecoder("utf-8",{fatal:!0})),t=i+n,a=0===i&&t===a.length?a:a.subarray(i,t);try{var u=o.decode(a)}catch(t){if(void 0===ot){try{o.decode(new Uint8Array([128]))}catch(t){}try{o.decode(new Uint8Array([97])),ot=!0}catch(t){ot=!1}}throw!ot&&(rt=void 0),t}}else{n=(u=i)+n,i=[];for(var s,f,l=null;u(s=t[u++])?i.push(s):224>s?u>=n?tt():(f=t[u++],194>s||128!=(192&f)?(u--,tt()):i.push((31&s)<<6|63&f)):240>s?u>=n-1?tt():128!=(192&(f=t[u++]))||224===s&&160>f||237===s&&160<=f||128!=(192&(a=t[u++]))?(u--,tt()):i.push((15&s)<<12|(63&f)<<6|63&a):244>=s?u>=n-2?tt():128!=(192&(f=t[u++]))||0!=f-144+(s<<28)>>30||128!=(192&(a=t[u++]))||128!=(192&(o=t[u++]))?(u--,tt()):(s=(7&s)<<18|(63&f)<<12|(63&a)<<6|63&o,s-=65536,i.push(55296+(s>>10&1023),56320+(1023&s))):tt(),8192<=i.length&&(l=et(l,i),i.length=0);u=et(l,i)}return Wt(e,r,u),!0}),(function(t,e,r){if(null!=(e=Vt(e,r))){var n=!1;if(n=void 0!==n&&n,ut){if(n&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(nt||(nt=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;au)o[i++]=u;else{if(2048>u)o[i++]=u>>6|192;else{if(55296<=u&&57343>=u){if(56319>=u&&a=s){u=1024*(u-55296)+s-56320+65536,o[i++]=u>>18|240,o[i++]=u>>12&63|128,o[i++]=u>>6&63|128,o[i++]=63&u|128;continue}a--}if(n)throw Error("Found an unpaired surrogate");u=65533}o[i++]=u>>12|224,o[i++]=u>>6&63|128}o[i++]=63&u|128}}e=i===o.length?o:o.subarray(0,i)}wt(t.h,8*r+2),wt(t.h,e.length),Ft(t,t.h.end()),Ft(t,e)}})),Ne=Pe((function(t,e,r,n,i){if(2!==t.i)return!1;e=qt(e,r,n),r=t.h.j,n=dt(t.h)>>>0;var o=t.h.h+n,a=o-r;if(0>=a&&(t.h.j=o,i(e,t,void 0,void 0,void 0),a=o-t.h.h),a)throw Error("Message parsing ended unexpectedly. Expected to read "+n+" bytes, instead read "+(n-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.h.h=o,t.h.j=r,!0}),(function(t,e,r,n,i){if(null!=(e=Kt(e,n,r)))for(n=0;n>>=7,a.i++;o.push(u),a.i++}}));function De(t){return function(e,r){t:{if(Et.length){var n=Et.pop();n.setOptions(r),pt(n.h,e,r),e=n}else e=new At(e,r);try{var i=Re(t),o=Ue(new i.P,e,i);break t}finally{(i=e.h).i=null,i.m=!1,i.l=0,i.j=0,i.h=0,i.S=!1,e.l=-1,e.i=-1,100>Et.length&&Et.push(e)}o=void 0}return o}}function Ge(t){return function(){var e=new Ot;Ce(this,e,Oe(t)),Ft(e,e.h.end());for(var r=new Uint8Array(e.i),n=e.j,i=n.length,o=0,a=0;a (Promise|void); + +/** + * Contains all of the setup options to drive the face solution. + */ +export interface SelfieSegmentationConfig { + locateFile?: (path: string, prefix?: string) => string; +} + +/** + * Declares the interface of SelfieSegmentation. + */ +declare interface SelfieSegmentationInterface { + close(): Promise; + onResults(listener: ResultsListener): void; + initialize(): Promise; + reset(): void; + send(inputs: InputMap): Promise; + setOptions(options: Options): void; +} + +/** + * Encapsulates the entire SelfieSegmentation solution. All that is needed from the + * developer is the source of the image data. The user will call `send` + * repeatedly and if a face is detected, then the user can receive callbacks + * with this metadata. + */ +export declare class SelfieSegmentation implements SelfieSegmentationInterface { + constructor(config?: SelfieSegmentationConfig); + + /** + * Shuts down the object. Call before creating a new instance. + */ + close(): Promise; + + /** + * Registers a single callback that will carry any results that occur + * after calling Send(). + */ + onResults(listener: ResultsListener): void; + + /** + * Initializes the solution. This includes loading ML models and mediapipe + * configurations, as well as setting up potential listeners for metadata. If + * `initialize` is not called manually, then it will be called the first time + * the developer calls `send`. + */ + initialize(): Promise; + + /** + * Tells the graph to restart before the next frame is sent. + */ + reset(): void; + + /** + * Processes a single frame of data, which depends on the options sent to the + * constructor. + */ + send(inputs: InputMap): Promise; + + /** + * Adjusts options in the solution. This may trigger a graph reload the next + * time the graph tries to run. + */ + setOptions(options: Options): void; +} diff --git a/build/assets/selfieSegmentation/package.json b/build/assets/selfieSegmentation/package.json new file mode 100644 index 0000000..505f1ac --- /dev/null +++ b/build/assets/selfieSegmentation/package.json @@ -0,0 +1,27 @@ +{ + "name": "@mediapipe/selfie_segmentation", + "version": "0.1.1675465747", + "description": "Mediapipe Selfie Segmentation Solution", + "main": "selfie_segmentation.js", + "module": "selfie_segmentation.js", + "jsdelivr": "selfie_segmentation.js", + "unpkg": "selfie_segmentation.js", + "types": "index.d.ts", + "author": "mhays@google.com", + "license": "Apache-2.0", + "homepage": "https://google.github.io/mediapipe/solutions/selfie_segmentation", + "keywords": [ "AR", "ML", "Augmented" ], + "devDependencies": { + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "dependencies": { + }, + "browser": { + "node-fetch": false, + "util": false, + "crypto": false + }, + "sideEffects" : [] +} diff --git a/build/assets/selfieSegmentation/selfie_segmentation.binarypb b/build/assets/selfieSegmentation/selfie_segmentation.binarypb new file mode 100644 index 0000000..b255289 Binary files /dev/null and b/build/assets/selfieSegmentation/selfie_segmentation.binarypb differ diff --git a/build/assets/selfieSegmentation/selfie_segmentation.js b/build/assets/selfieSegmentation/selfie_segmentation.js new file mode 100644 index 0000000..e8e11ec --- /dev/null +++ b/build/assets/selfieSegmentation/selfie_segmentation.js @@ -0,0 +1 @@ +(function(){"use strict";var t;function e(t){var e=0;return function(){return e>>0)+"_",i=0;return function t(r){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(n+(r||"")+"_"+i++,r)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;ae&&(e=Math.max(0,n+e)),(null==r||r>n)&&(r=n),0>(r=Number(r))&&(r=Math.max(0,n+r)),e=Number(e||0);e(e=e||0)&&(e=Math.max(e+n,0));e>4),64!=a&&(e(o<<4&240|a>>2),64!=u&&e(a<<6&192|u))}}(t,(function(t){n[i++]=t})),i!==r?n.subarray(0,i):n}function U(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],r=0;5>r;r++){var n=t.concat(e[r].split(""));_[r]=n;for(var i=0;i>2];a=e[(3&a)<<4|u>>4],u=e[(15&u)<<2|s>>6],s=e[63&s],r[o++]=f+a+u+s}switch(f=0,s=n,t.length-i){case 2:s=e[(15&(f=t[i+1]))<<2]||n;case 1:t=t[i],r[o]=e[t>>2]+e[(3&t)<<4|f>>4]+s+n}return r.join("")}for(e="";10240t,r=(t=Math.abs(t))>>>0;t=Math.floor((t-r)/4294967296),e&&(e=(r=a(J(r,t))).next().value,t=r.next().value,r=e),V=r>>>0,W=t>>>0}var X,Y="function"==typeof BigInt;function J(t,e){return e=~e,t?t=1+~t:e+=1,[t,e]}function K(t,e){this.i=t>>>0,this.h=e>>>0}function Z(t){if(!t)return X||(X=new K(0,0));if(!/^-?\d+$/.test(t))return null;if(16>t.length)H(Number(t));else if(Y)t=BigInt(t),V=Number(t&BigInt(4294967295))>>>0,W=Number(t>>BigInt(32)&BigInt(4294967295));else{var e=+("-"===t[0]);W=V=0;for(var r=t.length,n=e,i=(r-e)%6+e;i<=r;n=i,i+=6)n=Number(t.slice(n,i)),W*=1e6,4294967296<=(V=1e6*V+n)&&(W+=V/4294967296|0,V%=4294967296);e&&(t=(e=a(J(V,W))).next().value,e=e.next().value,V=t,W=e)}return new K(V,W)}function q(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function $(){return Error("Failed to read varint, encoding is invalid.")}function Q(t,e){return Error("Tried to read past the end of the data "+e+" > "+t)}function tt(){throw Error("Invalid UTF8")}function et(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var rt,nt,it,ot=void 0,at="undefined"!=typeof TextDecoder,ut="undefined"!=typeof TextEncoder;function st(t){if(t!==G)throw Error("illegal external caller")}function ft(t,e){if(st(e),this.V=t,null!=t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}function lt(){return it||(it=new ft(null,G))}function ht(t){st(G);var e=t.V;return null==(e=null==e||C&&null!=e&&e instanceof Uint8Array?e:"string"==typeof e?N(e):null)?e:t.V=e}function ct(t,e){this.i=null,this.m=!1,this.h=this.j=this.l=0,pt(this,t,e)}function pt(t,e,r){r=void 0===r?{}:r,t.S=void 0!==r.S&&r.S,e&&(e=function(t){if("string"==typeof t)return{buffer:N(t),C:!1};if(Array.isArray(t))return{buffer:new Uint8Array(t),C:!1};if(t.constructor===Uint8Array)return{buffer:t,C:!1};if(t.constructor===ArrayBuffer)return{buffer:new Uint8Array(t),C:!1};if(t.constructor===ft)return{buffer:ht(t)||D(),C:!0};if(t instanceof Uint8Array)return{buffer:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),C:!1};throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, a ByteString or an Array of numbers")}(e),t.i=e.buffer,t.m=e.C,t.l=0,t.j=t.i.length,t.h=t.l)}function vt(t,e){if(t.h=e,e>t.j)throw Q(t.j,e)}function dt(t){var e=t.i,r=t.h,n=e[r++],i=127&n;if(128&n&&(i|=(127&(n=e[r++]))<<7,128&n&&(i|=(127&(n=e[r++]))<<14,128&n&&(i|=(127&(n=e[r++]))<<21,128&n&&(i|=(n=e[r++])<<28,128&n&&128&e[r++]&&128&e[r++]&&128&e[r++]&&128&e[r++]&&128&e[r++])))))throw $();return vt(t,r),i}function yt(t,e){if(0>e)throw Error("Tried to read a negative byte length: "+e);var r=t.h,n=r+e;if(n>t.j)throw Q(e,t.j-r);return t.h=n,r}ct.prototype.reset=function(){this.h=this.l};var gt=[];function mt(){this.h=[]}function bt(t,e,r){for(;0>>7|r<<25)>>>0,r>>>=7;t.h.push(e)}function wt(t,e){for(;127>>=7;t.h.push(e)}function At(t,e){if(gt.length){var r=gt.pop();pt(r,t,e),t=r}else t=new ct(t,e);this.h=t,this.j=this.h.h,this.i=this.l=-1,this.setOptions(e)}function jt(t){var e=t.h;if(e.h==e.j)return!1;t.j=t.h.h;var r=dt(t.h)>>>0;if(e=r>>>3,!(0<=(r&=7)&&5>=r))throw q(r,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.l=e,t.i=r,!0}function xt(t){switch(t.i){case 0:if(0!=t.i)xt(t);else t:{for(var e=(t=t.h).h,r=e+10,n=t.i;e>>0,vt(t=t.h,t.h+e));break;case 5:vt(t=t.h,t.h+4);break;case 3:for(e=t.l;;){if(!jt(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.i){if(t.l!=e)throw Error("Unmatched end-group tag");break}xt(t)}break;default:throw q(t.i,t.j)}}mt.prototype.length=function(){return this.h.length},mt.prototype.end=function(){var t=this.h;return this.h=[],t},At.prototype.setOptions=function(t){t=void 0===t?{}:t,this.ca=void 0!==t.ca&&t.ca},At.prototype.reset=function(){this.h.reset(),this.j=this.h.h,this.i=this.l=-1};var Et=[];function Ot(){this.j=[],this.i=0,this.h=new mt}function Ft(t,e){0!==e.length&&(t.j.push(e),t.i+=e.length)}var St="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol():void 0;function Tt(t,e){return St?t[St]|=e:void 0!==t.A?t.A|=e:(Object.defineProperties(t,{A:{value:e,configurable:!0,writable:!0,enumerable:!1}}),e)}function _t(t,e){St?t[St]&&(t[St]&=~e):void 0!==t.A&&(t.A&=~e)}function kt(t){var e;return null==(e=St?t[St]:t.A)?0:e}function Rt(t,e){St?t[St]=e:void 0!==t.A?t.A=e:Object.defineProperties(t,{A:{value:e,configurable:!0,writable:!0,enumerable:!1}})}function Ut(t){return Tt(t,1),t}function Ct(t,e){Rt(e,-51&(0|t))}function Pt(t,e){Rt(e,-41&(18|t))}var Bt={};function Mt(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var It,Lt,Nt=[];function Dt(t){if(2&kt(t.o))throw Error("Cannot mutate an immutable Message")}function Gt(t){var e=t.length;(e=e?t[e-1]:void 0)&&Mt(e)?e.g=1:(e={},t.push((e.g=1,e)))}function zt(t){var e=t.i+t.G;return t.B||(t.B=t.o[e]={})}function Vt(t,e){return-1===e?null:e>=t.i?t.B?t.B[e]:void 0:t.o[e+t.G]}function Wt(t,e,r,n){Dt(t),Ht(t,e,r,n)}function Ht(t,e,r,n){t.j&&(t.j=void 0),e>=t.i||n?zt(t)[e]=r:(t.o[e+t.G]=r,(t=t.B)&&e in t&&delete t[e])}function Xt(t,e,r,n){var i=Vt(t,e);Array.isArray(i)||(i=It);var o=kt(i);if(1&o||Ut(i),n)2&o||Tt(i,2),1&r||Object.freeze(i);else{n=!(2&r);var a=2&o;1&r||!a?n&&16&o&&!a&&_t(i,16):Ht(t,e,i=Ut(Array.prototype.slice.call(i)))}return i}function Yt(t,e){var r=Vt(t,e),n=null==r?r:"number"==typeof r||"NaN"===r||"Infinity"===r||"-Infinity"===r?Number(r):void 0;return null!=n&&n!==r&&Ht(t,e,n),n}function Jt(t,e,r,n,i){t.h||(t.h={});var o=t.h[r],a=Xt(t,r,3,i);if(!o){var u=a;o=[];var s=!!(16&kt(t.o));a=!!(2&kt(u));var f=u;!i&&a&&(u=Array.prototype.slice.call(u));for(var l=a,h=0;ha&&"number"!=typeof t[a]){var u=t[a++];r(e,u)}for(;a>>0)>>31)+1,o=a>>>23&255,a&=8388607,Wt(e,r,255==o?a?NaN:1/0*t:0==o?t*Math.pow(2,-149)*a:t*Math.pow(2,o-150)*(a+Math.pow(2,23))),!0}),(function(t,e,r){if(null!=(e=Yt(e,r))){wt(t.h,8*r+5),t=t.h;var n=+e;0===n?0<1/n?V=W=0:(W=0,V=2147483648):isNaN(n)?(W=0,V=2147483647):34028234663852886e22<(n=(r=0>n?-2147483648:0)?-n:n)?(W=0,V=(2139095040|r)>>>0):11754943508222875e-54>n?(n=Math.round(n/Math.pow(2,-149)),W=0,V=(r|n)>>>0):(e=Math.floor(Math.log(n)/Math.LN2),n*=Math.pow(2,-e),16777216<=(n=Math.round(8388608*n))&&++e,W=0,V=(r|e+127<<23|8388607&n)>>>0),r=V,t.h.push(r>>>0&255),t.h.push(r>>>8&255),t.h.push(r>>>16&255),t.h.push(r>>>24&255)}})),Me=Pe((function(t,e,r){if(0!==t.i)return!1;var n=t.h,i=0,o=t=0,a=n.i,u=n.h;do{var s=a[u++];i|=(127&s)<o&&128&s);for(32>4),o=3;32>o&&128&s;o+=7)t|=(127&(s=a[u++]))<s))throw $();return n=i>>>0,(t=2147483648&(s=t>>>0))&&(s=~s>>>0,0==(n=1+~n>>>0)&&(s=s+1>>>0)),n=4294967296*s+(n>>>0),Wt(e,r,t?-n:n),!0}),(function(t,e,r){null!=(e=Vt(e,r))&&("string"==typeof e&&Z(e),null!=e&&(wt(t.h,8*r),"number"==typeof e?(t=t.h,H(e),bt(t,V,W)):(r=Z(e),bt(t.h,r.i,r.h))))})),Ie=Pe((function(t,e,r){return 0===t.i&&(Wt(e,r,dt(t.h)),!0)}),(function(t,e,r){if(null!=(e=Vt(e,r))&&null!=e)if(wt(t.h,8*r),t=t.h,0<=(r=e))wt(t,r);else{for(e=0;9>e;e++)t.h.push(127&r|128),r>>=7;t.h.push(1)}})),Le=Pe((function(t,e,r){if(2!==t.i)return!1;var n=dt(t.h)>>>0,i=yt(t=t.h,n);if(t=t.i,at){var o,a=t;(o=rt)||(o=rt=new TextDecoder("utf-8",{fatal:!0})),t=i+n,a=0===i&&t===a.length?a:a.subarray(i,t);try{var u=o.decode(a)}catch(t){if(void 0===ot){try{o.decode(new Uint8Array([128]))}catch(t){}try{o.decode(new Uint8Array([97])),ot=!0}catch(t){ot=!1}}throw!ot&&(rt=void 0),t}}else{n=(u=i)+n,i=[];for(var s,f,l=null;u(s=t[u++])?i.push(s):224>s?u>=n?tt():(f=t[u++],194>s||128!=(192&f)?(u--,tt()):i.push((31&s)<<6|63&f)):240>s?u>=n-1?tt():128!=(192&(f=t[u++]))||224===s&&160>f||237===s&&160<=f||128!=(192&(a=t[u++]))?(u--,tt()):i.push((15&s)<<12|(63&f)<<6|63&a):244>=s?u>=n-2?tt():128!=(192&(f=t[u++]))||0!=f-144+(s<<28)>>30||128!=(192&(a=t[u++]))||128!=(192&(o=t[u++]))?(u--,tt()):(s=(7&s)<<18|(63&f)<<12|(63&a)<<6|63&o,s-=65536,i.push(55296+(s>>10&1023),56320+(1023&s))):tt(),8192<=i.length&&(l=et(l,i),i.length=0);u=et(l,i)}return Wt(e,r,u),!0}),(function(t,e,r){if(null!=(e=Vt(e,r))){var n=!1;if(n=void 0!==n&&n,ut){if(n&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(nt||(nt=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;au)o[i++]=u;else{if(2048>u)o[i++]=u>>6|192;else{if(55296<=u&&57343>=u){if(56319>=u&&a=s){u=1024*(u-55296)+s-56320+65536,o[i++]=u>>18|240,o[i++]=u>>12&63|128,o[i++]=u>>6&63|128,o[i++]=63&u|128;continue}a--}if(n)throw Error("Found an unpaired surrogate");u=65533}o[i++]=u>>12|224,o[i++]=u>>6&63|128}o[i++]=63&u|128}}e=i===o.length?o:o.subarray(0,i)}wt(t.h,8*r+2),wt(t.h,e.length),Ft(t,t.h.end()),Ft(t,e)}})),Ne=Pe((function(t,e,r,n,i){if(2!==t.i)return!1;e=qt(e,r,n),r=t.h.j,n=dt(t.h)>>>0;var o=t.h.h+n,a=o-r;if(0>=a&&(t.h.j=o,i(e,t,void 0,void 0,void 0),a=o-t.h.h),a)throw Error("Message parsing ended unexpectedly. Expected to read "+n+" bytes, instead read "+(n-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.h.h=o,t.h.j=r,!0}),(function(t,e,r,n,i){if(null!=(e=Kt(e,n,r)))for(n=0;n>>=7,a.i++;o.push(u),a.i++}}));function De(t){return function(e,r){t:{if(Et.length){var n=Et.pop();n.setOptions(r),pt(n.h,e,r),e=n}else e=new At(e,r);try{var i=Re(t),o=Ue(new i.P,e,i);break t}finally{(i=e.h).i=null,i.m=!1,i.l=0,i.j=0,i.h=0,i.S=!1,e.l=-1,e.i=-1,100>Et.length&&Et.push(e)}o=void 0}return o}}function Ge(t){return function(){var e=new Ot;Ce(this,e,Oe(t)),Ft(e,e.h.end());for(var r=new Uint8Array(e.i),n=e.j,i=n.length,o=0,a=0;a{var e="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0;return"undefined"!=typeof __filename&&(e=e||__filename),function(r){var t,n,o=void 0!==(r=r||{})?r:{};o.ready=new Promise((function(e,r){t=e,n=r})),["_main","_fflush","___getTypeName","__embind_initialize_bindings","onRuntimeInitialized"].forEach((e=>{Object.getOwnPropertyDescriptor(o.ready,e)||Object.defineProperty(o.ready,e,{get:()=>de("You are getting "+e+" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js"),set:()=>de("You are setting "+e+" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")})}));var a=Object.assign({},o),i=[],s="./this.program",u=(e,r)=>{throw r},c="object"==typeof window,l="function"==typeof importScripts,d="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,f=!c&&!d&&!l;if(o.ENVIRONMENT)throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");var m,p,g,v="";function h(e){if(e instanceof Ce)return;let r=e;e&&"object"==typeof e&&e.stack&&(r=[e,e.stack]),E("exiting due to exception: "+r)}if(d){if("undefined"==typeof process||!process.release||"node"!==process.release.name)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var y=require("fs"),b=require("path");v=l?b.dirname(v)+"/":__dirname+"/",m=(e,r)=>(e=ye(e)?new URL(e):b.normalize(e),y.readFileSync(e,r?void 0:"utf8")),g=e=>{var r=m(e,!0);return r.buffer||(r=new Uint8Array(r)),A(r.buffer),r},p=(e,r,t)=>{e=ye(e)?new URL(e):b.normalize(e),y.readFile(e,(function(e,n){e?t(e):r(n.buffer)}))},process.argv.length>1&&(s=process.argv[1].replace(/\\/g,"/")),i=process.argv.slice(2),process.on("uncaughtException",(function(e){if(!(e instanceof Ce))throw e})),process.on("unhandledRejection",(function(e){throw e})),u=(e,r)=>{if(ne())throw process.exitCode=e,r;h(r),process.exit(e)},o.inspect=function(){return"[Emscripten Module object]"}}else if(f){if("object"==typeof process&&"function"==typeof require||"object"==typeof window||"function"==typeof importScripts)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");"undefined"!=typeof read&&(m=function(e){return read(e)}),g=function(e){let r;return"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(r=read(e,"binary"),A("object"==typeof r),r)},p=function(e,r,t){setTimeout((()=>r(g(e))),0)},"undefined"!=typeof scriptArgs?i=scriptArgs:void 0!==arguments&&(i=arguments),"function"==typeof quit&&(u=(e,r)=>{h(r),quit(e)}),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)}else{if(!c&&!l)throw new Error("environment detection error");if(l?v=self.location.href:"undefined"!=typeof document&&document.currentScript&&(v=document.currentScript.src),e&&(v=e),v=0!==v.indexOf("blob:")?v.substr(0,v.replace(/[?#].*/,"").lastIndexOf("/")+1):"","object"!=typeof window&&"function"!=typeof importScripts)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");m=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},l&&(g=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),p=(e,r,t)=>{var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=()=>{200==n.status||0==n.status&&n.response?r(n.response):t()},n.onerror=t,n.send(null)},e=>document.title=e}var w,_=o.print||console.log.bind(console),E=o.printErr||console.warn.bind(console);Object.assign(o,a),a=null,w="fetchSettings",Object.getOwnPropertyDescriptor(o,w)&&de("`Module."+w+"` was supplied but `"+w+"` not included in INCOMING_MODULE_JS_API"),o.arguments&&(i=o.arguments),T("arguments","arguments_"),o.thisProgram&&(s=o.thisProgram),T("thisProgram","thisProgram"),o.quit&&(u=o.quit),T("quit","quit_"),A(void 0===o.memoryInitializerPrefixURL,"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),A(void 0===o.pthreadMainPrefixURL,"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),A(void 0===o.cdInitializerPrefixURL,"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),A(void 0===o.filePackagePrefixURL,"Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),A(void 0===o.read,"Module.read option was removed (modify read_ in JS)"),A(void 0===o.readAsync,"Module.readAsync option was removed (modify readAsync in JS)"),A(void 0===o.readBinary,"Module.readBinary option was removed (modify readBinary in JS)"),A(void 0===o.setWindowTitle,"Module.setWindowTitle option was removed (modify setWindowTitle in JS)"),A(void 0===o.TOTAL_MEMORY,"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),T("read","read_"),T("readAsync","readAsync"),T("readBinary","readBinary"),T("setWindowTitle","setWindowTitle"),A(!f,"shell environment detected but not enabled at build time. Add 'shell' to `-sENVIRONMENT` to enable.");var x,C=4;function T(e,r){Object.getOwnPropertyDescriptor(o,e)||Object.defineProperty(o,e,{configurable:!0,get:function(){de("Module."+e+" has been replaced with plain "+r+" (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}function S(e){return"FS_createPath"===e||"FS_createDataFile"===e||"FS_createPreloadedFile"===e||"FS_unlink"===e||"addRunDependency"===e||"FS_createLazyFile"===e||"FS_createDevice"===e||"removeRunDependency"===e}o.wasmBinary&&(x=o.wasmBinary),T("wasmBinary","wasmBinary");var P,k=o.noExitRuntime||!0;T("noExitRuntime","noExitRuntime"),"object"!=typeof WebAssembly&&de("no native wasm support detected");var F,L=!1;function A(e,r){e||de("Assertion failed"+(r?": "+r:""))}var D,B,M,O,R,I,N,j,U,V="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function $(e,r,t){for(var n=r+t,o=r;e[o]&&!(o>=n);)++o;if(o-r>16&&e.buffer&&V)return V.decode(e.subarray(r,o));for(var a="";r>10,56320|1023&c)}}else a+=String.fromCharCode((31&i)<<6|s)}else a+=String.fromCharCode(i)}return a}function z(e,r){return e?$(M,e,r):""}function G(e,r,t,n){if(!(n>0))return 0;for(var o=t,a=t+n-1,i=0;i=55296&&s<=57343)s=65536+((1023&s)<<10)|1023&e.charCodeAt(++i);if(s<=127){if(t>=a)break;r[t++]=s}else if(s<=2047){if(t+1>=a)break;r[t++]=192|s>>6,r[t++]=128|63&s}else if(s<=65535){if(t+2>=a)break;r[t++]=224|s>>12,r[t++]=128|s>>6&63,r[t++]=128|63&s}else{if(t+3>=a)break;s>1114111&&Ve("Invalid Unicode code point "+Ge(s)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF)."),r[t++]=240|s>>18,r[t++]=128|s>>12&63,r[t++]=128|s>>6&63,r[t++]=128|63&s}}return r[t]=0,t-o}function W(e,r,t){return A("number"==typeof t,"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),G(e,M,r,t)}function H(e){for(var r=0,t=0;t=55296&&n<=57343?(r+=4,++t):r+=3}return r}function q(e){D=e,o.HEAP8=B=new Int8Array(e),o.HEAP16=O=new Int16Array(e),o.HEAP32=I=new Int32Array(e),o.HEAPU8=M=new Uint8Array(e),o.HEAPU16=R=new Uint16Array(e),o.HEAPU32=N=new Uint32Array(e),o.HEAPF32=j=new Float32Array(e),o.HEAPF64=U=new Float64Array(e)}var Y=65536;o.STACK_SIZE&&A(Y===o.STACK_SIZE,"the stack size can no longer be determined at runtime");var X,Q=o.INITIAL_MEMORY||16777216;function K(){if(!L){var e=Fn();0==e&&(e+=4);var r=N[e>>2],t=N[e+4>>2];34821223==r&&2310721022==t||de("Stack overflow! Stack cookie has been overwritten at "+Ge(e)+", expected hex dwords 0x89BACDFE and 0x2135467, but received "+Ge(t)+" "+Ge(r)),1668509029!==N[0]&&de("Runtime error: The application has corrupted its heap memory area (address zero)!")}}T("INITIAL_MEMORY","INITIAL_MEMORY"),A(Q>=Y,"INITIAL_MEMORY should be larger than STACK_SIZE, was "+Q+"! (STACK_SIZE="+Y+")"),A("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&null!=Int32Array.prototype.subarray&&null!=Int32Array.prototype.set,"JS engine does not provide full typed array support"),A(!o.wasmMemory,"Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),A(16777216==Q,"Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),function(){var e=new Int16Array(1),r=new Int8Array(e.buffer);if(e[0]=25459,115!==r[0]||99!==r[1])throw"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)"}();var J=[],Z=[],ee=[],re=[],te=!1;function ne(){return k}A(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),A(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),A(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),A(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var oe=0,ae=null,ie=null,se={};function ue(e){for(var r=e;;){if(!se[e])return e;e=r+Math.random()}}function ce(e){oe++,o.monitorRunDependencies&&o.monitorRunDependencies(oe),e?(A(!se[e]),se[e]=1,null===ae&&"undefined"!=typeof setInterval&&(ae=setInterval((function(){if(L)return clearInterval(ae),void(ae=null);var e=!1;for(var r in se)e||(e=!0,E("still waiting on run dependencies:")),E("dependency: "+r);e&&E("(end of list)")}),1e4))):E("warning: run dependency added without ID")}function le(e){if(oe--,o.monitorRunDependencies&&o.monitorRunDependencies(oe),e?(A(se[e]),delete se[e]):E("warning: run dependency removed without ID"),0==oe&&(null!==ae&&(clearInterval(ae),ae=null),ie)){var r=ie;ie=null,r()}}function de(e){o.onAbort&&o.onAbort(e),E(e="Aborted("+e+")"),L=!0,F=1;var r=new WebAssembly.RuntimeError(e);throw n(r),r}var fe,me,pe,ge,ve="data:application/octet-stream;base64,";function he(e){return e.startsWith(ve)}function ye(e){return e.startsWith("file://")}function be(e,r){return function(){var t=e,n=r;return r||(n=o.asm),A(te,"native function `"+t+"` called before runtime initialization"),n[e]||A(n[e],"exported native function `"+t+"` not found"),n[e].apply(null,arguments)}}function we(e){try{if(e==fe&&x)return new Uint8Array(x);if(g)return g(e);throw"both async and sync fetching of the wasm failed"}catch(e){de(e)}}he(fe="selfie_segmentation_solution_simd_wasm_bin.wasm")||(me=fe,fe=o.locateFile?o.locateFile(me,v):v+me);var _e,Ee={512548:e=>{const r=or.toValue(e).getContext("webgpu");return Yt.add(r.getCurrentTexture())},512683:(e,r,t,n,o)=>{const a=or.toValue(e),i=Yt.get(r),s=Yt.get(t),u=n,c=o;i.queue.copyExternalImageToTexture({source:a},{texture:s},[u,c])},512934:(e,r,t,n)=>{const o=or.toValue(e),a=Yt.get(r),i=Yt.get(t),s=Yt.get(n),u=a.createBindGroup({layout:s,entries:[{binding:0,resource:i},{binding:1,resource:o}]});return Yt.add(u)},513282:(e,r)=>{const t=or.toValue(e),n=or.toValue(r),o=n.getContext("2d"),a=new ImageData(t,n.width,n.height);o.putImageData(a,0,0)},513506:(e,r)=>{const t=or.toValue(e),n=or.toValue(r),o=t.getContext("2d").getImageData(0,0,t.width,t.height);n.set(o.data)},513710:(e,r)=>{const t=or.toValue(e);or.toValue(r).getContext("2d").drawImage(t,0,0)},513846:()=>!!o.preinitializedWebGPUDevice,513897:()=>{let e=!0;if(e){const r=Gt;if("function"!=typeof r)return void("undefined"!=typeof console&&console.error('Expected Emscripten global function "findCanvasEventTarget" not found. WebGL context creation may fail.'));Gt=function(e){if(0==e){if(o&&o.canvas)return o.canvas;if(o&&o.canvasCssSelector)return r(o.canvasCssSelector);"undefined"!=typeof console&&console.warn("Module properties canvas and canvasCssSelector not found during WebGL context creation.")}return r(e)},e=!1}},514682:()=>"undefined"!=typeof wasmOffsetConverter};function xe(e,r){if($e.mainLoop.timingMode=e,$e.mainLoop.timingValue=r,!$e.mainLoop.func)return E("emscripten_set_main_loop_timing: Cannot set timing mode for main loop since a main loop does not exist! Call emscripten_set_main_loop first to set one up."),1;if($e.mainLoop.running||($e.mainLoop.running=!0),0==e)$e.mainLoop.scheduler=function(){var e=0|Math.max(0,$e.mainLoop.tickStartTime+r-_e());setTimeout($e.mainLoop.runner,e)},$e.mainLoop.method="timeout";else if(1==e)$e.mainLoop.scheduler=function(){$e.requestAnimationFrame($e.mainLoop.runner)},$e.mainLoop.method="rAF";else if(2==e){if("undefined"==typeof setImmediate){var t=[],n="setimmediate";addEventListener("message",(e=>{e.data!==n&&e.data.target!==n||(e.stopPropagation(),t.shift()())}),!0),setImmediate=function(e){t.push(e),l?(void 0===o.setImmediates&&(o.setImmediates=[]),o.setImmediates.push(e),postMessage({target:n})):postMessage(n,"*")}}$e.mainLoop.scheduler=function(){setImmediate($e.mainLoop.runner)},$e.mainLoop.method="immediate"}return 0}function Ce(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}_e=d?()=>{var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:()=>performance.now();var Te={isAbs:e=>"/"===e.charAt(0),splitPath:e=>/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1),normalizeArray:(e,r)=>{for(var t=0,n=e.length-1;n>=0;n--){var o=e[n];"."===o?e.splice(n,1):".."===o?(e.splice(n,1),t++):t&&(e.splice(n,1),t--)}if(r)for(;t;t--)e.unshift("..");return e},normalize:e=>{var r=Te.isAbs(e),t="/"===e.substr(-1);return(e=Te.normalizeArray(e.split("/").filter((e=>!!e)),!r).join("/"))||r||(e="."),e&&t&&(e+="/"),(r?"/":"")+e},dirname:e=>{var r=Te.splitPath(e),t=r[0],n=r[1];return t||n?(n&&(n=n.substr(0,n.length-1)),t+n):"."},basename:e=>{if("/"===e)return"/";var r=(e=(e=Te.normalize(e)).replace(/\/$/,"")).lastIndexOf("/");return-1===r?e:e.substr(r+1)},join:function(){var e=Array.prototype.slice.call(arguments);return Te.normalize(e.join("/"))},join2:(e,r)=>Te.normalize(e+"/"+r)};function Se(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var e=new Uint8Array(1);return()=>(crypto.getRandomValues(e),e[0])}if(d)try{var r=require("crypto");return()=>r.randomBytes(1)[0]}catch(e){}return()=>de("no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };")}var Pe={resolve:function(){for(var e="",r=!1,t=arguments.length-1;t>=-1&&!r;t--){var n=t>=0?arguments[t]:Oe.cwd();if("string"!=typeof n)throw new TypeError("Arguments to path.resolve must be strings");if(!n)return"";e=n+"/"+e,r=Te.isAbs(n)}return(r?"/":"")+(e=Te.normalizeArray(e.split("/").filter((e=>!!e)),!r).join("/"))||"."},relative:(e,r)=>{function t(e){for(var r=0;r=0&&""===e[t];t--);return r>t?[]:e.slice(r,t-r+1)}e=Pe.resolve(e).substr(1),r=Pe.resolve(r).substr(1);for(var n=t(e.split("/")),o=t(r.split("/")),a=Math.min(n.length,o.length),i=a,s=0;s0?t:H(e)+1,o=new Array(n),a=G(e,o,0,o.length);return r&&(o.length=a),o}var Fe={ttys:[],init:function(){},shutdown:function(){},register:function(e,r){Fe.ttys[e]={input:[],output:[],ops:r},Oe.registerDevice(e,Fe.stream_ops)},stream_ops:{open:function(e){var r=Fe.ttys[e.node.rdev];if(!r)throw new Oe.ErrnoError(43);e.tty=r,e.seekable=!1},close:function(e){e.tty.ops.fsync(e.tty)},fsync:function(e){e.tty.ops.fsync(e.tty)},read:function(e,r,t,n,o){if(!e.tty||!e.tty.ops.get_char)throw new Oe.ErrnoError(60);for(var a=0,i=0;i0?t.slice(0,n).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(r=window.prompt("Input: "))&&(r+="\n"):"function"==typeof readline&&null!==(r=readline())&&(r+="\n");if(!r)return null;e.input=ke(r,!0)}return e.input.shift()},put_char:function(e,r){null===r||10===r?(_($(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},fsync:function(e){e.output&&e.output.length>0&&(_($(e.output,0)),e.output=[])}},default_tty1_ops:{put_char:function(e,r){null===r||10===r?(E($(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},fsync:function(e){e.output&&e.output.length>0&&(E($(e.output,0)),e.output=[])}}};function Le(e){e=function(e,r){return A(r,"alignment argument is required"),Math.ceil(e/r)*r}(e,65536);var r=Pn(65536,e);return r?function(e,r){return M.fill(0,e,e+r),e}(r,e):0}var Ae={ops_table:null,mount:function(e){return Ae.createNode(null,"/",16895,0)},createNode:function(e,r,t,n){if(Oe.isBlkdev(t)||Oe.isFIFO(t))throw new Oe.ErrnoError(63);Ae.ops_table||(Ae.ops_table={dir:{node:{getattr:Ae.node_ops.getattr,setattr:Ae.node_ops.setattr,lookup:Ae.node_ops.lookup,mknod:Ae.node_ops.mknod,rename:Ae.node_ops.rename,unlink:Ae.node_ops.unlink,rmdir:Ae.node_ops.rmdir,readdir:Ae.node_ops.readdir,symlink:Ae.node_ops.symlink},stream:{llseek:Ae.stream_ops.llseek}},file:{node:{getattr:Ae.node_ops.getattr,setattr:Ae.node_ops.setattr},stream:{llseek:Ae.stream_ops.llseek,read:Ae.stream_ops.read,write:Ae.stream_ops.write,allocate:Ae.stream_ops.allocate,mmap:Ae.stream_ops.mmap,msync:Ae.stream_ops.msync}},link:{node:{getattr:Ae.node_ops.getattr,setattr:Ae.node_ops.setattr,readlink:Ae.node_ops.readlink},stream:{}},chrdev:{node:{getattr:Ae.node_ops.getattr,setattr:Ae.node_ops.setattr},stream:Oe.chrdev_stream_ops}});var o=Oe.createNode(e,r,t,n);return Oe.isDir(o.mode)?(o.node_ops=Ae.ops_table.dir.node,o.stream_ops=Ae.ops_table.dir.stream,o.contents={}):Oe.isFile(o.mode)?(o.node_ops=Ae.ops_table.file.node,o.stream_ops=Ae.ops_table.file.stream,o.usedBytes=0,o.contents=null):Oe.isLink(o.mode)?(o.node_ops=Ae.ops_table.link.node,o.stream_ops=Ae.ops_table.link.stream):Oe.isChrdev(o.mode)&&(o.node_ops=Ae.ops_table.chrdev.node,o.stream_ops=Ae.ops_table.chrdev.stream),o.timestamp=Date.now(),e&&(e.contents[r]=o,e.timestamp=o.timestamp),o},getFileDataAsTypedArray:function(e){return e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0)},expandFileStorage:function(e,r){var t=e.contents?e.contents.length:0;if(!(t>=r)){r=Math.max(r,t*(t<1048576?2:1.125)>>>0),0!=t&&(r=Math.max(r,256));var n=e.contents;e.contents=new Uint8Array(r),e.usedBytes>0&&e.contents.set(n.subarray(0,e.usedBytes),0)}},resizeFileStorage:function(e,r){if(e.usedBytes!=r)if(0==r)e.contents=null,e.usedBytes=0;else{var t=e.contents;e.contents=new Uint8Array(r),t&&e.contents.set(t.subarray(0,Math.min(r,e.usedBytes))),e.usedBytes=r}},node_ops:{getattr:function(e){var r={};return r.dev=Oe.isChrdev(e.mode)?e.id:1,r.ino=e.id,r.mode=e.mode,r.nlink=1,r.uid=0,r.gid=0,r.rdev=e.rdev,Oe.isDir(e.mode)?r.size=4096:Oe.isFile(e.mode)?r.size=e.usedBytes:Oe.isLink(e.mode)?r.size=e.link.length:r.size=0,r.atime=new Date(e.timestamp),r.mtime=new Date(e.timestamp),r.ctime=new Date(e.timestamp),r.blksize=4096,r.blocks=Math.ceil(r.size/r.blksize),r},setattr:function(e,r){void 0!==r.mode&&(e.mode=r.mode),void 0!==r.timestamp&&(e.timestamp=r.timestamp),void 0!==r.size&&Ae.resizeFileStorage(e,r.size)},lookup:function(e,r){throw Oe.genericErrors[44]},mknod:function(e,r,t,n){return Ae.createNode(e,r,t,n)},rename:function(e,r,t){if(Oe.isDir(e.mode)){var n;try{n=Oe.lookupNode(r,t)}catch(e){}if(n)for(var o in n.contents)throw new Oe.ErrnoError(55)}delete e.parent.contents[e.name],e.parent.timestamp=Date.now(),e.name=t,r.contents[t]=e,r.timestamp=e.parent.timestamp,e.parent=r},unlink:function(e,r){delete e.contents[r],e.timestamp=Date.now()},rmdir:function(e,r){var t=Oe.lookupNode(e,r);for(var n in t.contents)throw new Oe.ErrnoError(55);delete e.contents[r],e.timestamp=Date.now()},readdir:function(e){var r=[".",".."];for(var t in e.contents)e.contents.hasOwnProperty(t)&&r.push(t);return r},symlink:function(e,r,t){var n=Ae.createNode(e,r,41471,0);return n.link=t,n},readlink:function(e){if(!Oe.isLink(e.mode))throw new Oe.ErrnoError(28);return e.link}},stream_ops:{read:function(e,r,t,n,o){var a=e.node.contents;if(o>=e.node.usedBytes)return 0;var i=Math.min(e.node.usedBytes-o,n);if(A(i>=0),i>8&&a.subarray)r.set(a.subarray(o,o+i),t);else for(var s=0;s0||t+r{if(!(e=Pe.resolve(e)))return{path:"",node:null};if((r=Object.assign({follow_mount:!0,recurse_count:0},r)).recurse_count>8)throw new Oe.ErrnoError(32);for(var t=e.split("/").filter((e=>!!e)),n=Oe.root,o="/",a=0;a40)throw new Oe.ErrnoError(32)}}return{path:o,node:n}},getPath:e=>{for(var r;;){if(Oe.isRoot(e)){var t=e.mount.mountpoint;return r?"/"!==t[t.length-1]?t+"/"+r:t+r:t}r=r?e.name+"/"+r:e.name,e=e.parent}},hashName:(e,r)=>{for(var t=0,n=0;n>>0)%Oe.nameTable.length},hashAddNode:e=>{var r=Oe.hashName(e.parent.id,e.name);e.name_next=Oe.nameTable[r],Oe.nameTable[r]=e},hashRemoveNode:e=>{var r=Oe.hashName(e.parent.id,e.name);if(Oe.nameTable[r]===e)Oe.nameTable[r]=e.name_next;else for(var t=Oe.nameTable[r];t;){if(t.name_next===e){t.name_next=e.name_next;break}t=t.name_next}},lookupNode:(e,r)=>{var t=Oe.mayLookup(e);if(t)throw new Oe.ErrnoError(t,e);for(var n=Oe.hashName(e.id,r),o=Oe.nameTable[n];o;o=o.name_next){var a=o.name;if(o.parent.id===e.id&&a===r)return o}return Oe.lookup(e,r)},createNode:(e,r,t,n)=>{A("object"==typeof e);var o=new Oe.FSNode(e,r,t,n);return Oe.hashAddNode(o),o},destroyNode:e=>{Oe.hashRemoveNode(e)},isRoot:e=>e===e.parent,isMountpoint:e=>!!e.mounted,isFile:e=>32768==(61440&e),isDir:e=>16384==(61440&e),isLink:e=>40960==(61440&e),isChrdev:e=>8192==(61440&e),isBlkdev:e=>24576==(61440&e),isFIFO:e=>4096==(61440&e),isSocket:e=>49152==(49152&e),flagModes:{r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},modeStringToFlags:e=>{var r=Oe.flagModes[e];if(void 0===r)throw new Error("Unknown file open mode: "+e);return r},flagsToPermissionString:e=>{var r=["r","w","rw"][3&e];return 512&e&&(r+="w"),r},nodePermissions:(e,r)=>Oe.ignorePermissions||(!r.includes("r")||292&e.mode)&&(!r.includes("w")||146&e.mode)&&(!r.includes("x")||73&e.mode)?0:2,mayLookup:e=>{var r=Oe.nodePermissions(e,"x");return r||(e.node_ops.lookup?0:2)},mayCreate:(e,r)=>{try{Oe.lookupNode(e,r);return 20}catch(e){}return Oe.nodePermissions(e,"wx")},mayDelete:(e,r,t)=>{var n;try{n=Oe.lookupNode(e,r)}catch(e){return e.errno}var o=Oe.nodePermissions(e,"wx");if(o)return o;if(t){if(!Oe.isDir(n.mode))return 54;if(Oe.isRoot(n)||Oe.getPath(n)===Oe.cwd())return 10}else if(Oe.isDir(n.mode))return 31;return 0},mayOpen:(e,r)=>e?Oe.isLink(e.mode)?32:Oe.isDir(e.mode)&&("r"!==Oe.flagsToPermissionString(r)||512&r)?31:Oe.nodePermissions(e,Oe.flagsToPermissionString(r)):44,MAX_OPEN_FDS:4096,nextfd:(e=0,r=Oe.MAX_OPEN_FDS)=>{for(var t=e;t<=r;t++)if(!Oe.streams[t])return t;throw new Oe.ErrnoError(33)},getStream:e=>Oe.streams[e],createStream:(e,r,t)=>{Oe.FSStream||(Oe.FSStream=function(){this.shared={}},Oe.FSStream.prototype={},Object.defineProperties(Oe.FSStream.prototype,{object:{get:function(){return this.node},set:function(e){this.node=e}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}},flags:{get:function(){return this.shared.flags},set:function(e){this.shared.flags=e}},position:{get:function(){return this.shared.position},set:function(e){this.shared.position=e}}})),e=Object.assign(new Oe.FSStream,e);var n=Oe.nextfd(r,t);return e.fd=n,Oe.streams[n]=e,e},closeStream:e=>{Oe.streams[e]=null},chrdev_stream_ops:{open:e=>{var r=Oe.getDevice(e.node.rdev);e.stream_ops=r.stream_ops,e.stream_ops.open&&e.stream_ops.open(e)},llseek:()=>{throw new Oe.ErrnoError(70)}},major:e=>e>>8,minor:e=>255&e,makedev:(e,r)=>e<<8|r,registerDevice:(e,r)=>{Oe.devices[e]={stream_ops:r}},getDevice:e=>Oe.devices[e],getMounts:e=>{for(var r=[],t=[e];t.length;){var n=t.pop();r.push(n),t.push.apply(t,n.mounts)}return r},syncfs:(e,r)=>{"function"==typeof e&&(r=e,e=!1),Oe.syncFSRequests++,Oe.syncFSRequests>1&&E("warning: "+Oe.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var t=Oe.getMounts(Oe.root.mount),n=0;function o(e){return A(Oe.syncFSRequests>0),Oe.syncFSRequests--,r(e)}function a(e){if(e)return a.errored?void 0:(a.errored=!0,o(e));++n>=t.length&&o(null)}t.forEach((r=>{if(!r.type.syncfs)return a(null);r.type.syncfs(r,e,a)}))},mount:(e,r,t)=>{if("string"==typeof e)throw e;var n,o="/"===t,a=!t;if(o&&Oe.root)throw new Oe.ErrnoError(10);if(!o&&!a){var i=Oe.lookupPath(t,{follow_mount:!1});if(t=i.path,n=i.node,Oe.isMountpoint(n))throw new Oe.ErrnoError(10);if(!Oe.isDir(n.mode))throw new Oe.ErrnoError(54)}var s={type:e,opts:r,mountpoint:t,mounts:[]},u=e.mount(s);return u.mount=s,s.root=u,o?Oe.root=u:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),u},unmount:e=>{var r=Oe.lookupPath(e,{follow_mount:!1});if(!Oe.isMountpoint(r.node))throw new Oe.ErrnoError(28);var t=r.node,n=t.mounted,o=Oe.getMounts(n);Object.keys(Oe.nameTable).forEach((e=>{for(var r=Oe.nameTable[e];r;){var t=r.name_next;o.includes(r.mount)&&Oe.destroyNode(r),r=t}})),t.mounted=null;var a=t.mount.mounts.indexOf(n);A(-1!==a),t.mount.mounts.splice(a,1)},lookup:(e,r)=>e.node_ops.lookup(e,r),mknod:(e,r,t)=>{var n=Oe.lookupPath(e,{parent:!0}).node,o=Te.basename(e);if(!o||"."===o||".."===o)throw new Oe.ErrnoError(28);var a=Oe.mayCreate(n,o);if(a)throw new Oe.ErrnoError(a);if(!n.node_ops.mknod)throw new Oe.ErrnoError(63);return n.node_ops.mknod(n,o,r,t)},create:(e,r)=>(r=void 0!==r?r:438,r&=4095,r|=32768,Oe.mknod(e,r,0)),mkdir:(e,r)=>(r=void 0!==r?r:511,r&=1023,r|=16384,Oe.mknod(e,r,0)),mkdirTree:(e,r)=>{for(var t=e.split("/"),n="",o=0;o(void 0===t&&(t=r,r=438),r|=8192,Oe.mknod(e,r,t)),symlink:(e,r)=>{if(!Pe.resolve(e))throw new Oe.ErrnoError(44);var t=Oe.lookupPath(r,{parent:!0}).node;if(!t)throw new Oe.ErrnoError(44);var n=Te.basename(r),o=Oe.mayCreate(t,n);if(o)throw new Oe.ErrnoError(o);if(!t.node_ops.symlink)throw new Oe.ErrnoError(63);return t.node_ops.symlink(t,n,e)},rename:(e,r)=>{var t,n,o=Te.dirname(e),a=Te.dirname(r),i=Te.basename(e),s=Te.basename(r);if(t=Oe.lookupPath(e,{parent:!0}).node,n=Oe.lookupPath(r,{parent:!0}).node,!t||!n)throw new Oe.ErrnoError(44);if(t.mount!==n.mount)throw new Oe.ErrnoError(75);var u,c=Oe.lookupNode(t,i),l=Pe.relative(e,a);if("."!==l.charAt(0))throw new Oe.ErrnoError(28);if("."!==(l=Pe.relative(r,o)).charAt(0))throw new Oe.ErrnoError(55);try{u=Oe.lookupNode(n,s)}catch(e){}if(c!==u){var d=Oe.isDir(c.mode),f=Oe.mayDelete(t,i,d);if(f)throw new Oe.ErrnoError(f);if(f=u?Oe.mayDelete(n,s,d):Oe.mayCreate(n,s))throw new Oe.ErrnoError(f);if(!t.node_ops.rename)throw new Oe.ErrnoError(63);if(Oe.isMountpoint(c)||u&&Oe.isMountpoint(u))throw new Oe.ErrnoError(10);if(n!==t&&(f=Oe.nodePermissions(t,"w")))throw new Oe.ErrnoError(f);Oe.hashRemoveNode(c);try{t.node_ops.rename(c,n,s)}catch(e){throw e}finally{Oe.hashAddNode(c)}}},rmdir:e=>{var r=Oe.lookupPath(e,{parent:!0}).node,t=Te.basename(e),n=Oe.lookupNode(r,t),o=Oe.mayDelete(r,t,!0);if(o)throw new Oe.ErrnoError(o);if(!r.node_ops.rmdir)throw new Oe.ErrnoError(63);if(Oe.isMountpoint(n))throw new Oe.ErrnoError(10);r.node_ops.rmdir(r,t),Oe.destroyNode(n)},readdir:e=>{var r=Oe.lookupPath(e,{follow:!0}).node;if(!r.node_ops.readdir)throw new Oe.ErrnoError(54);return r.node_ops.readdir(r)},unlink:e=>{var r=Oe.lookupPath(e,{parent:!0}).node;if(!r)throw new Oe.ErrnoError(44);var t=Te.basename(e),n=Oe.lookupNode(r,t),o=Oe.mayDelete(r,t,!1);if(o)throw new Oe.ErrnoError(o);if(!r.node_ops.unlink)throw new Oe.ErrnoError(63);if(Oe.isMountpoint(n))throw new Oe.ErrnoError(10);r.node_ops.unlink(r,t),Oe.destroyNode(n)},readlink:e=>{var r=Oe.lookupPath(e).node;if(!r)throw new Oe.ErrnoError(44);if(!r.node_ops.readlink)throw new Oe.ErrnoError(28);return Pe.resolve(Oe.getPath(r.parent),r.node_ops.readlink(r))},stat:(e,r)=>{var t=Oe.lookupPath(e,{follow:!r}).node;if(!t)throw new Oe.ErrnoError(44);if(!t.node_ops.getattr)throw new Oe.ErrnoError(63);return t.node_ops.getattr(t)},lstat:e=>Oe.stat(e,!0),chmod:(e,r,t)=>{var n;"string"==typeof e?n=Oe.lookupPath(e,{follow:!t}).node:n=e;if(!n.node_ops.setattr)throw new Oe.ErrnoError(63);n.node_ops.setattr(n,{mode:4095&r|-4096&n.mode,timestamp:Date.now()})},lchmod:(e,r)=>{Oe.chmod(e,r,!0)},fchmod:(e,r)=>{var t=Oe.getStream(e);if(!t)throw new Oe.ErrnoError(8);Oe.chmod(t.node,r)},chown:(e,r,t,n)=>{var o;"string"==typeof e?o=Oe.lookupPath(e,{follow:!n}).node:o=e;if(!o.node_ops.setattr)throw new Oe.ErrnoError(63);o.node_ops.setattr(o,{timestamp:Date.now()})},lchown:(e,r,t)=>{Oe.chown(e,r,t,!0)},fchown:(e,r,t)=>{var n=Oe.getStream(e);if(!n)throw new Oe.ErrnoError(8);Oe.chown(n.node,r,t)},truncate:(e,r)=>{if(r<0)throw new Oe.ErrnoError(28);var t;"string"==typeof e?t=Oe.lookupPath(e,{follow:!0}).node:t=e;if(!t.node_ops.setattr)throw new Oe.ErrnoError(63);if(Oe.isDir(t.mode))throw new Oe.ErrnoError(31);if(!Oe.isFile(t.mode))throw new Oe.ErrnoError(28);var n=Oe.nodePermissions(t,"w");if(n)throw new Oe.ErrnoError(n);t.node_ops.setattr(t,{size:r,timestamp:Date.now()})},ftruncate:(e,r)=>{var t=Oe.getStream(e);if(!t)throw new Oe.ErrnoError(8);if(0==(2097155&t.flags))throw new Oe.ErrnoError(28);Oe.truncate(t.node,r)},utime:(e,r,t)=>{var n=Oe.lookupPath(e,{follow:!0}).node;n.node_ops.setattr(n,{timestamp:Math.max(r,t)})},open:(e,r,t)=>{if(""===e)throw new Oe.ErrnoError(44);var n;if(t=void 0===t?438:t,t=64&(r="string"==typeof r?Oe.modeStringToFlags(r):r)?4095&t|32768:0,"object"==typeof e)n=e;else{e=Te.normalize(e);try{n=Oe.lookupPath(e,{follow:!(131072&r)}).node}catch(e){}}var a=!1;if(64&r)if(n){if(128&r)throw new Oe.ErrnoError(20)}else n=Oe.mknod(e,t,0),a=!0;if(!n)throw new Oe.ErrnoError(44);if(Oe.isChrdev(n.mode)&&(r&=-513),65536&r&&!Oe.isDir(n.mode))throw new Oe.ErrnoError(54);if(!a){var i=Oe.mayOpen(n,r);if(i)throw new Oe.ErrnoError(i)}512&r&&!a&&Oe.truncate(n,0),r&=-131713;var s=Oe.createStream({node:n,path:Oe.getPath(n),flags:r,seekable:!0,position:0,stream_ops:n.stream_ops,ungotten:[],error:!1});return s.stream_ops.open&&s.stream_ops.open(s),!o.logReadFiles||1&r||(Oe.readFiles||(Oe.readFiles={}),e in Oe.readFiles||(Oe.readFiles[e]=1)),s},close:e=>{if(Oe.isClosed(e))throw new Oe.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(e){throw e}finally{Oe.closeStream(e.fd)}e.fd=null},isClosed:e=>null===e.fd,llseek:(e,r,t)=>{if(Oe.isClosed(e))throw new Oe.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new Oe.ErrnoError(70);if(0!=t&&1!=t&&2!=t)throw new Oe.ErrnoError(28);return e.position=e.stream_ops.llseek(e,r,t),e.ungotten=[],e.position},read:(e,r,t,n,o)=>{if(n<0||o<0)throw new Oe.ErrnoError(28);if(Oe.isClosed(e))throw new Oe.ErrnoError(8);if(1==(2097155&e.flags))throw new Oe.ErrnoError(8);if(Oe.isDir(e.node.mode))throw new Oe.ErrnoError(31);if(!e.stream_ops.read)throw new Oe.ErrnoError(28);var a=void 0!==o;if(a){if(!e.seekable)throw new Oe.ErrnoError(70)}else o=e.position;var i=e.stream_ops.read(e,r,t,n,o);return a||(e.position+=i),i},write:(e,r,t,n,o,a)=>{if(n<0||o<0)throw new Oe.ErrnoError(28);if(Oe.isClosed(e))throw new Oe.ErrnoError(8);if(0==(2097155&e.flags))throw new Oe.ErrnoError(8);if(Oe.isDir(e.node.mode))throw new Oe.ErrnoError(31);if(!e.stream_ops.write)throw new Oe.ErrnoError(28);e.seekable&&1024&e.flags&&Oe.llseek(e,0,2);var i=void 0!==o;if(i){if(!e.seekable)throw new Oe.ErrnoError(70)}else o=e.position;var s=e.stream_ops.write(e,r,t,n,o,a);return i||(e.position+=s),s},allocate:(e,r,t)=>{if(Oe.isClosed(e))throw new Oe.ErrnoError(8);if(r<0||t<=0)throw new Oe.ErrnoError(28);if(0==(2097155&e.flags))throw new Oe.ErrnoError(8);if(!Oe.isFile(e.node.mode)&&!Oe.isDir(e.node.mode))throw new Oe.ErrnoError(43);if(!e.stream_ops.allocate)throw new Oe.ErrnoError(138);e.stream_ops.allocate(e,r,t)},mmap:(e,r,t,n,o)=>{if(0!=(2&n)&&0==(2&o)&&2!=(2097155&e.flags))throw new Oe.ErrnoError(2);if(1==(2097155&e.flags))throw new Oe.ErrnoError(2);if(!e.stream_ops.mmap)throw new Oe.ErrnoError(43);return e.stream_ops.mmap(e,r,t,n,o)},msync:(e,r,t,n,o)=>e.stream_ops.msync?e.stream_ops.msync(e,r,t,n,o):0,munmap:e=>0,ioctl:(e,r,t)=>{if(!e.stream_ops.ioctl)throw new Oe.ErrnoError(59);return e.stream_ops.ioctl(e,r,t)},readFile:(e,r={})=>{if(r.flags=r.flags||0,r.encoding=r.encoding||"binary","utf8"!==r.encoding&&"binary"!==r.encoding)throw new Error('Invalid encoding type "'+r.encoding+'"');var t,n=Oe.open(e,r.flags),o=Oe.stat(e).size,a=new Uint8Array(o);return Oe.read(n,a,0,o,0),"utf8"===r.encoding?t=$(a,0):"binary"===r.encoding&&(t=a),Oe.close(n),t},writeFile:(e,r,t={})=>{t.flags=t.flags||577;var n=Oe.open(e,t.flags,t.mode);if("string"==typeof r){var o=new Uint8Array(H(r)+1),a=G(r,o,0,o.length);Oe.write(n,o,0,a,void 0,t.canOwn)}else{if(!ArrayBuffer.isView(r))throw new Error("Unsupported data type");Oe.write(n,r,0,r.byteLength,void 0,t.canOwn)}Oe.close(n)},cwd:()=>Oe.currentPath,chdir:e=>{var r=Oe.lookupPath(e,{follow:!0});if(null===r.node)throw new Oe.ErrnoError(44);if(!Oe.isDir(r.node.mode))throw new Oe.ErrnoError(54);var t=Oe.nodePermissions(r.node,"x");if(t)throw new Oe.ErrnoError(t);Oe.currentPath=r.path},createDefaultDirectories:()=>{Oe.mkdir("/tmp"),Oe.mkdir("/home"),Oe.mkdir("/home/web_user")},createDefaultDevices:()=>{Oe.mkdir("/dev"),Oe.registerDevice(Oe.makedev(1,3),{read:()=>0,write:(e,r,t,n,o)=>n}),Oe.mkdev("/dev/null",Oe.makedev(1,3)),Fe.register(Oe.makedev(5,0),Fe.default_tty_ops),Fe.register(Oe.makedev(6,0),Fe.default_tty1_ops),Oe.mkdev("/dev/tty",Oe.makedev(5,0)),Oe.mkdev("/dev/tty1",Oe.makedev(6,0));var e=Se();Oe.createDevice("/dev","random",e),Oe.createDevice("/dev","urandom",e),Oe.mkdir("/dev/shm"),Oe.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{Oe.mkdir("/proc");var e=Oe.mkdir("/proc/self");Oe.mkdir("/proc/self/fd"),Oe.mount({mount:()=>{var r=Oe.createNode(e,"fd",16895,73);return r.node_ops={lookup:(e,r)=>{var t=+r,n=Oe.getStream(t);if(!n)throw new Oe.ErrnoError(8);var o={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>n.path}};return o.parent=o,o}},r}},{},"/proc/self/fd")},createStandardStreams:()=>{o.stdin?Oe.createDevice("/dev","stdin",o.stdin):Oe.symlink("/dev/tty","/dev/stdin"),o.stdout?Oe.createDevice("/dev","stdout",null,o.stdout):Oe.symlink("/dev/tty","/dev/stdout"),o.stderr?Oe.createDevice("/dev","stderr",null,o.stderr):Oe.symlink("/dev/tty1","/dev/stderr");var e=Oe.open("/dev/stdin",0),r=Oe.open("/dev/stdout",1),t=Oe.open("/dev/stderr",1);A(0===e.fd,"invalid handle for stdin ("+e.fd+")"),A(1===r.fd,"invalid handle for stdout ("+r.fd+")"),A(2===t.fd,"invalid handle for stderr ("+t.fd+")")},ensureErrnoError:()=>{Oe.ErrnoError||(Oe.ErrnoError=function(e,r){this.node=r,this.setErrno=function(e){for(var r in this.errno=e,Be)if(Be[r]===e){this.code=r;break}},this.setErrno(e),this.message=De[e],this.stack&&(Object.defineProperty(this,"stack",{value:(new Error).stack,writable:!0}),this.stack=Me(this.stack))},Oe.ErrnoError.prototype=new Error,Oe.ErrnoError.prototype.constructor=Oe.ErrnoError,[44].forEach((e=>{Oe.genericErrors[e]=new Oe.ErrnoError(e),Oe.genericErrors[e].stack=""})))},staticInit:()=>{Oe.ensureErrnoError(),Oe.nameTable=new Array(4096),Oe.mount(Ae,{},"/"),Oe.createDefaultDirectories(),Oe.createDefaultDevices(),Oe.createSpecialDirectories(),Oe.filesystems={MEMFS:Ae}},init:(e,r,t)=>{A(!Oe.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)"),Oe.init.initialized=!0,Oe.ensureErrnoError(),o.stdin=e||o.stdin,o.stdout=r||o.stdout,o.stderr=t||o.stderr,Oe.createStandardStreams()},quit:()=>{Oe.init.initialized=!1,Tn(0);for(var e=0;e{var t=0;return e&&(t|=365),r&&(t|=146),t},findObject:(e,r)=>{var t=Oe.analyzePath(e,r);return t.exists?t.object:null},analyzePath:(e,r)=>{try{e=(n=Oe.lookupPath(e,{follow:!r})).path}catch(e){}var t={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var n=Oe.lookupPath(e,{parent:!0});t.parentExists=!0,t.parentPath=n.path,t.parentObject=n.node,t.name=Te.basename(e),n=Oe.lookupPath(e,{follow:!r}),t.exists=!0,t.path=n.path,t.object=n.node,t.name=n.node.name,t.isRoot="/"===n.path}catch(e){t.error=e.errno}return t},createPath:(e,r,t,n)=>{e="string"==typeof e?e:Oe.getPath(e);for(var o=r.split("/").reverse();o.length;){var a=o.pop();if(a){var i=Te.join2(e,a);try{Oe.mkdir(i)}catch(e){}e=i}}return i},createFile:(e,r,t,n,o)=>{var a=Te.join2("string"==typeof e?e:Oe.getPath(e),r),i=Oe.getMode(n,o);return Oe.create(a,i)},createDataFile:(e,r,t,n,o,a)=>{var i=r;e&&(e="string"==typeof e?e:Oe.getPath(e),i=r?Te.join2(e,r):e);var s=Oe.getMode(n,o),u=Oe.create(i,s);if(t){if("string"==typeof t){for(var c=new Array(t.length),l=0,d=t.length;l{var o=Te.join2("string"==typeof e?e:Oe.getPath(e),r),a=Oe.getMode(!!t,!!n);Oe.createDevice.major||(Oe.createDevice.major=64);var i=Oe.makedev(Oe.createDevice.major++,0);return Oe.registerDevice(i,{open:e=>{e.seekable=!1},close:e=>{n&&n.buffer&&n.buffer.length&&n(10)},read:(e,r,n,o,a)=>{for(var i=0,s=0;s{for(var i=0;i{if(e.isDevice||e.isFolder||e.link||e.contents)return!0;if("undefined"!=typeof XMLHttpRequest)throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");if(!m)throw new Error("Cannot load without read() or XMLHttpRequest.");try{e.contents=ke(m(e.url),!0),e.usedBytes=e.contents.length}catch(e){throw new Oe.ErrnoError(29)}},createLazyFile:(e,r,t,n,o)=>{function a(){this.lengthKnown=!1,this.chunks=[]}if(a.prototype.get=function(e){if(!(e>this.length-1||e<0)){var r=e%this.chunkSize,t=e/this.chunkSize|0;return this.getter(t)[r]}},a.prototype.setDataGetter=function(e){this.getter=e},a.prototype.cacheLength=function(){var e=new XMLHttpRequest;if(e.open("HEAD",t,!1),e.send(null),!(e.status>=200&&e.status<300||304===e.status))throw new Error("Couldn't load "+t+". Status: "+e.status);var r,n=Number(e.getResponseHeader("Content-length")),o=(r=e.getResponseHeader("Accept-Ranges"))&&"bytes"===r,a=(r=e.getResponseHeader("Content-Encoding"))&&"gzip"===r,i=1048576;o||(i=n);var s=this;s.setDataGetter((e=>{var r=e*i,o=(e+1)*i-1;if(o=Math.min(o,n-1),void 0===s.chunks[e]&&(s.chunks[e]=((e,r)=>{if(e>r)throw new Error("invalid range ("+e+", "+r+") or no bytes requested!");if(r>n-1)throw new Error("only "+n+" bytes available! programmer error!");var o=new XMLHttpRequest;if(o.open("GET",t,!1),n!==i&&o.setRequestHeader("Range","bytes="+e+"-"+r),o.responseType="arraybuffer",o.overrideMimeType&&o.overrideMimeType("text/plain; charset=x-user-defined"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error("Couldn't load "+t+". Status: "+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):ke(o.responseText||"",!0)})(r,o)),void 0===s.chunks[e])throw new Error("doXHR failed!");return s.chunks[e]})),!a&&n||(i=n=1,n=this.getter(0).length,i=n,_("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=n,this._chunkSize=i,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!l)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var i=new a;Object.defineProperties(i,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var s={isDevice:!1,contents:i}}else s={isDevice:!1,url:t};var u=Oe.createFile(e,r,s,n,o);s.contents?u.contents=s.contents:s.url&&(u.contents=null,u.url=s.url),Object.defineProperties(u,{usedBytes:{get:function(){return this.contents.length}}});var c={};function d(e,r,t,n,o){var a=e.node.contents;if(o>=a.length)return 0;var i=Math.min(a.length-o,n);if(A(i>=0),a.slice)for(var s=0;s{var r=u.stream_ops[e];c[e]=function(){return Oe.forceLoadFile(u),r.apply(null,arguments)}})),c.read=(e,r,t,n,o)=>(Oe.forceLoadFile(u),d(e,r,t,n,o)),c.mmap=(e,r,t,n,o)=>{Oe.forceLoadFile(u);var a=Le(r);if(!a)throw new Oe.ErrnoError(48);return d(e,B,a,r,t),{ptr:a,allocated:!0}},u.stream_ops=c,u},createPreloadedFile:(e,r,t,n,o,a,i,s,u,c)=>{var l=r?Pe.resolve(Te.join2(e,r)):e,d=ue("cp "+l);function f(t){function f(t){c&&c(),s||Oe.createDataFile(e,r,t,n,o,u),a&&a(),le(d)}$e.handledByPreloadPlugin(t,l,f,(()=>{i&&i(),le(d)}))||f(t)}ce(d),"string"==typeof t?function(e,r,t,n){var o=n?"":ue("al "+e);p(e,(t=>{A(t,'Loading data file "'+e+'" failed (no arrayBuffer).'),r(new Uint8Array(t)),o&&le(o)}),(r=>{if(!t)throw'Loading data file "'+e+'" failed.';t()})),o&&ce(o)}(t,(e=>f(e)),i):f(t)},indexedDB:()=>window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,DB_NAME:()=>"EM_FS_"+window.location.pathname,DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(e,r,t)=>{r=r||(()=>{}),t=t||(()=>{});var n=Oe.indexedDB();try{var o=n.open(Oe.DB_NAME(),Oe.DB_VERSION)}catch(e){return t(e)}o.onupgradeneeded=()=>{_("creating db"),o.result.createObjectStore(Oe.DB_STORE_NAME)},o.onsuccess=()=>{var n=o.result.transaction([Oe.DB_STORE_NAME],"readwrite"),a=n.objectStore(Oe.DB_STORE_NAME),i=0,s=0,u=e.length;function c(){0==s?r():t()}e.forEach((e=>{var r=a.put(Oe.analyzePath(e).object.contents,e);r.onsuccess=()=>{++i+s==u&&c()},r.onerror=()=>{s++,i+s==u&&c()}})),n.onerror=t},o.onerror=t},loadFilesFromDB:(e,r,t)=>{r=r||(()=>{}),t=t||(()=>{});var n=Oe.indexedDB();try{var o=n.open(Oe.DB_NAME(),Oe.DB_VERSION)}catch(e){return t(e)}o.onupgradeneeded=t,o.onsuccess=()=>{var n=o.result;try{var a=n.transaction([Oe.DB_STORE_NAME],"readonly")}catch(e){return void t(e)}var i=a.objectStore(Oe.DB_STORE_NAME),s=0,u=0,c=e.length;function l(){0==u?r():t()}e.forEach((e=>{var r=i.get(e);r.onsuccess=()=>{Oe.analyzePath(e).exists&&Oe.unlink(e),Oe.createDataFile(Te.dirname(e),Te.basename(e),r.result,!0,!0,!0),++s+u==c&&l()},r.onerror=()=>{u++,s+u==c&&l()}})),a.onerror=t},o.onerror=t},absolutePath:()=>{de("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder:()=>{de("FS.createFolder has been removed; use FS.mkdir instead")},createLink:()=>{de("FS.createLink has been removed; use FS.symlink instead")},joinPath:()=>{de("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc:()=>{de("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath:()=>{de("FS.standardizePath has been removed; use PATH.normalize instead")}},Re={DEFAULT_POLLMASK:5,calculateAt:function(e,r,t){if(Te.isAbs(r))return r;var n;-100===e?n=Oe.cwd():n=Re.getStreamFromFD(e).path;if(0==r.length){if(!t)throw new Oe.ErrnoError(44);return n}return Te.join2(n,r)},doStat:function(e,r,t){try{var n=e(r)}catch(e){if(e&&e.node&&Te.normalize(r)!==Te.normalize(Oe.getPath(e.node)))return-54;throw e}return I[t>>2]=n.dev,I[t+8>>2]=n.ino,I[t+12>>2]=n.mode,N[t+16>>2]=n.nlink,I[t+20>>2]=n.uid,I[t+24>>2]=n.gid,I[t+28>>2]=n.rdev,ge=[n.size>>>0,(pe=n.size,+Math.abs(pe)>=1?pe>0?(0|Math.min(+Math.floor(pe/4294967296),4294967295))>>>0:~~+Math.ceil((pe-+(~~pe>>>0))/4294967296)>>>0:0)],I[t+40>>2]=ge[0],I[t+44>>2]=ge[1],I[t+48>>2]=4096,I[t+52>>2]=n.blocks,ge=[Math.floor(n.atime.getTime()/1e3)>>>0,(pe=Math.floor(n.atime.getTime()/1e3),+Math.abs(pe)>=1?pe>0?(0|Math.min(+Math.floor(pe/4294967296),4294967295))>>>0:~~+Math.ceil((pe-+(~~pe>>>0))/4294967296)>>>0:0)],I[t+56>>2]=ge[0],I[t+60>>2]=ge[1],N[t+64>>2]=0,ge=[Math.floor(n.mtime.getTime()/1e3)>>>0,(pe=Math.floor(n.mtime.getTime()/1e3),+Math.abs(pe)>=1?pe>0?(0|Math.min(+Math.floor(pe/4294967296),4294967295))>>>0:~~+Math.ceil((pe-+(~~pe>>>0))/4294967296)>>>0:0)],I[t+72>>2]=ge[0],I[t+76>>2]=ge[1],N[t+80>>2]=0,ge=[Math.floor(n.ctime.getTime()/1e3)>>>0,(pe=Math.floor(n.ctime.getTime()/1e3),+Math.abs(pe)>=1?pe>0?(0|Math.min(+Math.floor(pe/4294967296),4294967295))>>>0:~~+Math.ceil((pe-+(~~pe>>>0))/4294967296)>>>0:0)],I[t+88>>2]=ge[0],I[t+92>>2]=ge[1],N[t+96>>2]=0,ge=[n.ino>>>0,(pe=n.ino,+Math.abs(pe)>=1?pe>0?(0|Math.min(+Math.floor(pe/4294967296),4294967295))>>>0:~~+Math.ceil((pe-+(~~pe>>>0))/4294967296)>>>0:0)],I[t+104>>2]=ge[0],I[t+108>>2]=ge[1],0},doMsync:function(e,r,t,n,o){if(!Oe.isFile(r.node.mode))throw new Oe.ErrnoError(43);if(2&n)return 0;var a=M.slice(e,e+t);Oe.msync(r,a,o,t,n)},varargs:void 0,get:function(){return A(null!=Re.varargs),Re.varargs+=4,I[Re.varargs-4>>2]},getStr:function(e){return z(e)},getStreamFromFD:function(e){var r=Oe.getStream(e);if(!r)throw new Oe.ErrnoError(8);return r}};function Ie(e){F=e,ne()||(o.onExit&&o.onExit(e),L=!0),u(e,new Ce(e))}var Ne=function(e,r){if(F=e,function(){var e=_,r=E,t=!1;_=E=e=>{t=!0};try{Tn(0),["stdout","stderr"].forEach((function(e){var r=Oe.analyzePath("/dev/"+e);if(r){var n=r.object.rdev,o=Fe.ttys[n];o&&o.output&&o.output.length&&(t=!0)}}))}catch(e){}_=e,E=r,t&&Ve("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.")}(),ne()&&!r){var t="program exited (with status: "+e+"), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)";n(t),E(t)}Ie(e)};function je(e){if(L)E("user callback triggered after runtime exited or application aborted. Ignoring.");else try{e()}catch(e){!function(e){if(e instanceof Ce||"unwind"==e)return F;K(),e instanceof WebAssembly.RuntimeError&&Ln()<=0&&E("Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to "+Y+")"),u(1,e)}(e)}}function Ue(e,r){return setTimeout((function(){je(e)}),r)}function Ve(e){Ve.shown||(Ve.shown={}),Ve.shown[e]||(Ve.shown[e]=1,d&&(e="warning: "+e),E(e))}var $e={mainLoop:{running:!1,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){$e.mainLoop.scheduler=null,$e.mainLoop.currentlyRunningMainloop++},resume:function(){$e.mainLoop.currentlyRunningMainloop++;var e=$e.mainLoop.timingMode,r=$e.mainLoop.timingValue,t=$e.mainLoop.func;$e.mainLoop.func=null,function(e,r,t,n,a){A(!$e.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),$e.mainLoop.func=e,$e.mainLoop.arg=n;var i=$e.mainLoop.currentlyRunningMainloop;function s(){return!(i<$e.mainLoop.currentlyRunningMainloop)}if($e.mainLoop.running=!1,$e.mainLoop.runner=function(){if(!L)if($e.mainLoop.queue.length>0){var r=Date.now(),t=$e.mainLoop.queue.shift();if(t.func(t.arg),$e.mainLoop.remainingBlockers){var n=$e.mainLoop.remainingBlockers,a=n%1==0?n-1:Math.floor(n);t.counted?$e.mainLoop.remainingBlockers=a:(a+=.5,$e.mainLoop.remainingBlockers=(8*n+a)/9)}if(_('main loop blocker "'+t.name+'" took '+(Date.now()-r)+" ms"),$e.mainLoop.updateStatus(),!s())return;setTimeout($e.mainLoop.runner,0)}else s()&&($e.mainLoop.currentFrameNumber=$e.mainLoop.currentFrameNumber+1|0,1==$e.mainLoop.timingMode&&$e.mainLoop.timingValue>1&&$e.mainLoop.currentFrameNumber%$e.mainLoop.timingValue!=0?$e.mainLoop.scheduler():(0==$e.mainLoop.timingMode&&($e.mainLoop.tickStartTime=_e()),Ut.newRenderingFrameStarted(),void 0!==Ut&&Ut.currentContext&&!Ut.currentContextIsProxied&&!Ut.currentContext.attributes.explicitSwapControl&&Ut.currentContext.GLctx.commit&&Ut.currentContext.GLctx.commit(),"timeout"===$e.mainLoop.method&&o.ctx&&(Ve("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),$e.mainLoop.method=""),$e.mainLoop.runIter(e),K(),s()&&("object"==typeof SDL&&SDL.audio&&SDL.audio.queueNewAudioData&&SDL.audio.queueNewAudioData(),$e.mainLoop.scheduler())))},a||(r&&r>0?xe(0,1e3/r):xe(1,1),$e.mainLoop.scheduler()),t)throw"unwind"}(t,0,!1,$e.mainLoop.arg,!0),xe(e,r),$e.mainLoop.scheduler()},updateStatus:function(){if(o.setStatus){var e=o.statusMessage||"Please wait...",r=$e.mainLoop.remainingBlockers,t=$e.mainLoop.expectedBlockers;r?r{A(s.complete,"Image "+r+" could not be decoded");var n=document.createElement("canvas");n.width=s.width,n.height=s.height,n.getContext("2d").drawImage(s,0,0),mn[r]=n,$e.URLObject.revokeObjectURL(i),t&&t(e)},s.onerror=e=>{_("Image "+i+" could not be decoded"),n&&n()},s.src=i}};o.preloadPlugins.push(e);var r={canHandle:function(e){return!o.noAudioDecoding&&e.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},handle:function(e,r,t,n){var o=!1;function a(n){o||(o=!0,pn[r]=n,t&&t(e))}function i(){o||(o=!0,pn[r]=new Audio,n&&n())}if(!$e.hasBlobConstructor)return i();try{var s=new Blob([e],{type:$e.getMimetype(r)})}catch(e){return i()}var u=$e.URLObject.createObjectURL(s);A("string"==typeof u,"createObjectURL must return a url as a string");var c=new Audio;c.addEventListener("canplaythrough",(()=>a(c)),!1),c.onerror=function(t){o||(E("warning: browser could not fully decode audio "+r+", trying slower base64 approach"),c.src="data:audio/x-"+r.substr(-3)+";base64,"+function(e){for(var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t="",n=0,o=0,a=0;a=6;){var i=n>>o-6&63;o-=6,t+=r[i]}return 2==o?(t+=r[(3&n)<<4],t+="=="):4==o&&(t+=r[(15&n)<<2],t+="="),t}(e),a(c))},c.src=u,Ue((function(){a(c)}),1e4)}};o.preloadPlugins.push(r);var t=o.canvas;t&&(t.requestPointerLock=t.requestPointerLock||t.mozRequestPointerLock||t.webkitRequestPointerLock||t.msRequestPointerLock||(()=>{}),t.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||(()=>{}),t.exitPointerLock=t.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",n,!1),document.addEventListener("mozpointerlockchange",n,!1),document.addEventListener("webkitpointerlockchange",n,!1),document.addEventListener("mspointerlockchange",n,!1),o.elementPointerLock&&t.addEventListener("click",(e=>{!$e.pointerLock&&o.canvas.requestPointerLock&&(o.canvas.requestPointerLock(),e.preventDefault())}),!1))}function n(){$e.pointerLock=document.pointerLockElement===o.canvas||document.mozPointerLockElement===o.canvas||document.webkitPointerLockElement===o.canvas||document.msPointerLockElement===o.canvas}},handledByPreloadPlugin:function(e,r,t,n){$e.init();var a=!1;return o.preloadPlugins.forEach((function(o){a||o.canHandle(r)&&(o.handle(e,r,t,n),a=!0)})),a},createContext:function(e,r,t,n){if(r&&o.ctx&&e==o.canvas)return o.ctx;var a,i;if(r){var s={antialias:!1,alpha:!1,majorVersion:"undefined"!=typeof WebGL2RenderingContext?2:1};if(n)for(var u in n)s[u]=n[u];void 0!==Ut&&(i=Ut.createContext(e,s))&&(a=Ut.getContext(i).GLctx)}else a=e.getContext("2d");return a?(t&&(r||A(void 0===fn,"cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),o.ctx=a,r&&Ut.makeContextCurrent(i),o.useWebGL=r,$e.moduleContextCreatedCallbacks.forEach((function(e){e()})),$e.init()),a):null},destroyContext:function(e,r,t){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(e,r){$e.lockPointer=e,$e.resizeCanvas=r,void 0===$e.lockPointer&&($e.lockPointer=!0),void 0===$e.resizeCanvas&&($e.resizeCanvas=!1);var t=o.canvas;function n(){$e.isFullscreen=!1;var e=t.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===e?(t.exitFullscreen=$e.exitFullscreen,$e.lockPointer&&t.requestPointerLock(),$e.isFullscreen=!0,$e.resizeCanvas?$e.setFullscreenCanvasSize():$e.updateCanvasDimensions(t)):(e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e),$e.resizeCanvas?$e.setWindowedCanvasSize():$e.updateCanvasDimensions(t)),o.onFullScreen&&o.onFullScreen($e.isFullscreen),o.onFullscreen&&o.onFullscreen($e.isFullscreen)}$e.fullscreenHandlersInstalled||($e.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",n,!1),document.addEventListener("mozfullscreenchange",n,!1),document.addEventListener("webkitfullscreenchange",n,!1),document.addEventListener("MSFullscreenChange",n,!1));var a=document.createElement("div");t.parentNode.insertBefore(a,t),a.appendChild(t),a.requestFullscreen=a.requestFullscreen||a.mozRequestFullScreen||a.msRequestFullscreen||(a.webkitRequestFullscreen?()=>a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):null)||(a.webkitRequestFullScreen?()=>a.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT):null),a.requestFullscreen()},requestFullScreen:function(){de("Module.requestFullScreen has been replaced by Module.requestFullscreen (without a capital S)")},exitFullscreen:function(){return!!$e.isFullscreen&&((document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){}).apply(document,[]),!0)},nextRAF:0,fakeRequestAnimationFrame:function(e){var r=Date.now();if(0===$e.nextRAF)$e.nextRAF=r+1e3/60;else for(;r+2>=$e.nextRAF;)$e.nextRAF+=1e3/60;var t=Math.max($e.nextRAF-r,0);setTimeout(e,t)},requestAnimationFrame:function(e){"function"!=typeof requestAnimationFrame?(0,$e.fakeRequestAnimationFrame)(e):requestAnimationFrame(e)},safeSetTimeout:function(e,r){return Ue(e,r)},safeRequestAnimationFrame:function(e){return $e.requestAnimationFrame((function(){je(e)}))},getMimetype:function(e){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[e.substr(e.lastIndexOf(".")+1)]},getUserMedia:function(e){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(e)},getMovementX:function(e){return e.movementX||e.mozMovementX||e.webkitMovementX||0},getMovementY:function(e){return e.movementY||e.mozMovementY||e.webkitMovementY||0},getMouseWheelDelta:function(e){var r=0;switch(e.type){case"DOMMouseScroll":r=e.detail/3;break;case"mousewheel":r=e.wheelDelta/120;break;case"wheel":switch(r=e.deltaY,e.deltaMode){case 0:r/=100;break;case 1:r/=3;break;case 2:r*=80;break;default:throw"unrecognized mouse wheel delta mode: "+e.deltaMode}break;default:throw"unrecognized mouse wheel event: "+e.type}return r},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(e){if($e.pointerLock)"mousemove"!=e.type&&"mozMovementX"in e?$e.mouseMovementX=$e.mouseMovementY=0:($e.mouseMovementX=$e.getMovementX(e),$e.mouseMovementY=$e.getMovementY(e)),"undefined"!=typeof SDL?($e.mouseX=SDL.mouseX+$e.mouseMovementX,$e.mouseY=SDL.mouseY+$e.mouseMovementY):($e.mouseX+=$e.mouseMovementX,$e.mouseY+=$e.mouseMovementY);else{var r=o.canvas.getBoundingClientRect(),t=o.canvas.width,n=o.canvas.height,a=void 0!==window.scrollX?window.scrollX:window.pageXOffset,i=void 0!==window.scrollY?window.scrollY:window.pageYOffset;if(A(void 0!==a&&void 0!==i,"Unable to retrieve scroll position, mouse positions likely broken."),"touchstart"===e.type||"touchend"===e.type||"touchmove"===e.type){var s=e.touch;if(void 0===s)return;var u=s.pageX-(a+r.left),c=s.pageY-(i+r.top),l={x:u*=t/r.width,y:c*=n/r.height};if("touchstart"===e.type)$e.lastTouches[s.identifier]=l,$e.touches[s.identifier]=l;else if("touchend"===e.type||"touchmove"===e.type){var d=$e.touches[s.identifier];d||(d=l),$e.lastTouches[s.identifier]=d,$e.touches[s.identifier]=l}return}var f=e.pageX-(a+r.left),m=e.pageY-(i+r.top);f*=t/r.width,m*=n/r.height,$e.mouseMovementX=f-$e.mouseX,$e.mouseMovementY=m-$e.mouseY,$e.mouseX=f,$e.mouseY=m}},resizeListeners:[],updateResizeListeners:function(){var e=o.canvas;$e.resizeListeners.forEach((function(r){r(e.width,e.height)}))},setCanvasSize:function(e,r,t){var n=o.canvas;$e.updateCanvasDimensions(n,e,r),t||$e.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if("undefined"!=typeof SDL){var e=N[SDL.screen>>2];e|=8388608,I[SDL.screen>>2]=e}$e.updateCanvasDimensions(o.canvas),$e.updateResizeListeners()},setWindowedCanvasSize:function(){if("undefined"!=typeof SDL){var e=N[SDL.screen>>2];e&=-8388609,I[SDL.screen>>2]=e}$e.updateCanvasDimensions(o.canvas),$e.updateResizeListeners()},updateCanvasDimensions:function(e,r,t){r&&t?(e.widthNative=r,e.heightNative=t):(r=e.widthNative,t=e.heightNative);var n=r,a=t;if(o.forcedAspectRatio&&o.forcedAspectRatio>0&&(n/a0;)e.shift()(o)}function Ge(e){return"0x"+e.toString(16).padStart(8,"0")}function We(e){this.excPtr=e,this.ptr=e-24,this.set_type=function(e){N[this.ptr+4>>2]=e},this.get_type=function(){return N[this.ptr+4>>2]},this.set_destructor=function(e){N[this.ptr+8>>2]=e},this.get_destructor=function(){return N[this.ptr+8>>2]},this.set_refcount=function(e){I[this.ptr>>2]=e},this.set_caught=function(e){e=e?1:0,B[this.ptr+12>>0]=e},this.get_caught=function(){return 0!=B[this.ptr+12>>0]},this.set_rethrown=function(e){e=e?1:0,B[this.ptr+13>>0]=e},this.get_rethrown=function(){return 0!=B[this.ptr+13>>0]},this.init=function(e,r){this.set_adjusted_ptr(0),this.set_type(e),this.set_destructor(r),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var e=I[this.ptr>>2];I[this.ptr>>2]=e+1},this.release_ref=function(){var e=I[this.ptr>>2];return I[this.ptr>>2]=e-1,A(e>0),1===e},this.set_adjusted_ptr=function(e){N[this.ptr+16>>2]=e},this.get_adjusted_ptr=function(){return N[this.ptr+16>>2]},this.get_exception_ptr=function(){if(An(this.get_type()))return N[this.excPtr>>2];var e=this.get_adjusted_ptr();return 0!==e?e:this.excPtr}}var He="To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking";var qe=48,Ye=57;function Xe(e){if(void 0===e)return"_unknown";var r=(e=e.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return r>=qe&&r<=Ye?"_"+e:e}function Qe(e,r){return e=Xe(e),function(){"use strict";return r.apply(this,arguments)}}var Ke=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Je=[];function Ze(e,r){var t=Qe(r,(function(e){this.name=r,this.message=e;var t=new Error(e).stack;void 0!==t&&(this.stack=this.toString()+"\n"+t.replace(/^Error(:[^\n]*)?\n/,""))}));return t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message},t}var er=void 0;function rr(e){throw new er(e)}function tr(){for(var e=0,r=5;r(e||rr("Cannot use deleted val. handle = "+e),Ke[e].value),toHandle:e=>{switch(e){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var r=Je.length?Je.pop():Ke.length;return Ke[r]={refcount:1,value:e},r}}},ar=void 0;var ir=void 0;function sr(e){for(var r="",t=e;M[t];)r+=ir[M[t++]];return r}function ur(){return Object.keys(pr).length}function cr(){var e=[];for(var r in pr)pr.hasOwnProperty(r)&&e.push(pr[r]);return e}var lr=[];function dr(){for(;lr.length;){var e=lr.pop();e.$$.deleteScheduled=!1,e.delete()}}var fr=void 0;function mr(e){fr=e,lr.length&&fr&&fr(dr)}var pr={};function gr(e,r){for(void 0===r&&rr("ptr should not be undefined");e.baseClass;)r=e.upcast(r),e=e.baseClass;return r}var vr={};function hr(e){var r=Sn(e),t=sr(r);return xn(r),t}function yr(e,r){var t=vr[e];return void 0===t&&rr(r+" has unknown type "+hr(e)),t}function br(e){}var wr=!1;function _r(e){e.count.value-=1,0===e.count.value&&function(e){e.smartPtr?e.smartPtrType.rawDestructor(e.smartPtr):e.ptrType.registeredClass.rawDestructor(e.ptr)}(e)}function Er(e,r,t){if(r===t)return e;if(void 0===t.baseClass)return null;var n=Er(e,r,t.baseClass);return null===n?null:t.downcast(n)}var xr={};var Cr=void 0;function Tr(e){throw new Cr(e)}function Sr(e,r){return r.ptrType&&r.ptr||Tr("makeClassHandle requires ptr and ptrType"),!!r.smartPtrType!==!!r.smartPtr&&Tr("Both smartPtrType and smartPtr must be specified"),r.count={value:1},kr(Object.create(e,{$$:{value:r}}))}function Pr(e){var r=this.getPointee(e);if(!r)return this.destructor(e),null;var t=function(e,r){return r=gr(e,r),pr[r]}(this.registeredClass,r);if(void 0!==t){if(0===t.$$.count.value)return t.$$.ptr=r,t.$$.smartPtr=e,t.clone();var n=t.clone();return this.destructor(e),n}function o(){return this.isSmartPointer?Sr(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:r,smartPtrType:this,smartPtr:e}):Sr(this.registeredClass.instancePrototype,{ptrType:this,ptr:e})}var a,i=this.registeredClass.getActualType(r),s=xr[i];if(!s)return o.call(this);a=this.isConst?s.constPointerType:s.pointerType;var u=Er(r,this.registeredClass,a.registeredClass);return null===u?o.call(this):this.isSmartPointer?Sr(a.registeredClass.instancePrototype,{ptrType:a,ptr:u,smartPtrType:this,smartPtr:e}):Sr(a.registeredClass.instancePrototype,{ptrType:a,ptr:u})}function kr(e){return"undefined"==typeof FinalizationRegistry?(kr=e=>e,e):(wr=new FinalizationRegistry((e=>{console.warn(e.leakWarning.stack.replace(/^Error: /,"")),_r(e.$$)})),kr=e=>{var r=e.$$;if(!!r.smartPtr){var t={$$:r},n=r.ptrType.registeredClass;t.leakWarning=new Error("Embind found a leaked C++ instance "+n.name+" <"+Ge(r.ptr)+">.\nWe'll free it automatically in this case, but this functionality is not reliable across various environments.\nMake sure to invoke .delete() manually once you're done with the instance instead.\nOriginally allocated"),"captureStackTrace"in Error&&Error.captureStackTrace(t.leakWarning,Pr),wr.register(e,t,e)}return e},br=e=>wr.unregister(e),kr(e))}var Fr={};function Lr(e){for(;e.length;){var r=e.pop();e.pop()(r)}}function Ar(e){return this.fromWireType(I[e>>2])}var Dr={},Br={};function Mr(e,r,t){function n(r){var n=t(r);n.length!==e.length&&Tr("Mismatched type converter count");for(var o=0;o{vr.hasOwnProperty(e)?o[r]=vr[e]:(a.push(e),Dr.hasOwnProperty(e)||(Dr[e]=[]),Dr[e].push((()=>{o[r]=vr[e],++i===a.length&&n(o)})))})),0===a.length&&n(o)}function Or(e){switch(e){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+e)}}function Rr(e,r,t={}){if(!("argPackAdvance"in r))throw new TypeError("registerType registeredInstance requires argPackAdvance");var n=r.name;if(e||rr('type "'+n+'" must have a positive integer typeid pointer'),vr.hasOwnProperty(e)){if(t.ignoreDuplicateRegistrations)return;rr("Cannot register type '"+n+"' twice")}if(vr[e]=r,delete Br[e],Dr.hasOwnProperty(e)){var o=Dr[e];delete Dr[e],o.forEach((e=>e()))}}function Ir(e){if(!(this instanceof zr))return!1;if(!(e instanceof zr))return!1;for(var r=this.$$.ptrType.registeredClass,t=this.$$.ptr,n=e.$$.ptrType.registeredClass,o=e.$$.ptr;r.baseClass;)t=r.upcast(t),r=r.baseClass;for(;n.baseClass;)o=n.upcast(o),n=n.baseClass;return r===n&&t===o}function Nr(e){rr(e.$$.ptrType.registeredClass.name+" instance already deleted")}function jr(){if(this.$$.ptr||Nr(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var e,r=kr(Object.create(Object.getPrototypeOf(this),{$$:{value:(e=this.$$,{count:e.count,deleteScheduled:e.deleteScheduled,preservePointerOnDelete:e.preservePointerOnDelete,ptr:e.ptr,ptrType:e.ptrType,smartPtr:e.smartPtr,smartPtrType:e.smartPtrType})}}));return r.$$.count.value+=1,r.$$.deleteScheduled=!1,r}function Ur(){this.$$.ptr||Nr(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&rr("Object already scheduled for deletion"),br(this),_r(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)}function Vr(){return!this.$$.ptr}function $r(){return this.$$.ptr||Nr(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&rr("Object already scheduled for deletion"),lr.push(this),1===lr.length&&fr&&fr(dr),this.$$.deleteScheduled=!0,this}function zr(){}function Gr(e,r,t){if(void 0===e[r].overloadTable){var n=e[r];e[r]=function(){return e[r].overloadTable.hasOwnProperty(arguments.length)||rr("Function '"+t+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+e[r].overloadTable+")!"),e[r].overloadTable[arguments.length].apply(this,arguments)},e[r].overloadTable=[],e[r].overloadTable[n.argCount]=n}}function Wr(e,r,t){o.hasOwnProperty(e)?((void 0===t||void 0!==o[e].overloadTable&&void 0!==o[e].overloadTable[t])&&rr("Cannot register public name '"+e+"' twice"),Gr(o,e,e),o.hasOwnProperty(t)&&rr("Cannot register multiple overloads of a function with the same number of arguments ("+t+")!"),o[e].overloadTable[t]=r):(o[e]=r,void 0!==t&&(o[e].numArguments=t))}function Hr(e,r,t,n,o,a,i,s){this.name=e,this.constructor=r,this.instancePrototype=t,this.rawDestructor=n,this.baseClass=o,this.getActualType=a,this.upcast=i,this.downcast=s,this.pureVirtualFunctions=[]}function qr(e,r,t){for(;r!==t;)r.upcast||rr("Expected null or instance of "+t.name+", got an instance of "+r.name),e=r.upcast(e),r=r.baseClass;return e}function Yr(e,r){if(null===r)return this.isReference&&rr("null is not a valid "+this.name),0;r.$$||rr('Cannot pass "'+ft(r)+'" as a '+this.name),r.$$.ptr||rr("Cannot pass deleted object as a pointer of type "+this.name);var t=r.$$.ptrType.registeredClass;return qr(r.$$.ptr,t,this.registeredClass)}function Xr(e,r){var t;if(null===r)return this.isReference&&rr("null is not a valid "+this.name),this.isSmartPointer?(t=this.rawConstructor(),null!==e&&e.push(this.rawDestructor,t),t):0;r.$$||rr('Cannot pass "'+ft(r)+'" as a '+this.name),r.$$.ptr||rr("Cannot pass deleted object as a pointer of type "+this.name),!this.isConst&&r.$$.ptrType.isConst&&rr("Cannot convert argument of type "+(r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name)+" to parameter type "+this.name);var n=r.$$.ptrType.registeredClass;if(t=qr(r.$$.ptr,n,this.registeredClass),this.isSmartPointer)switch(void 0===r.$$.smartPtr&&rr("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:r.$$.smartPtrType===this?t=r.$$.smartPtr:rr("Cannot convert argument of type "+(r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name)+" to parameter type "+this.name);break;case 1:t=r.$$.smartPtr;break;case 2:if(r.$$.smartPtrType===this)t=r.$$.smartPtr;else{var o=r.clone();t=this.rawShare(t,or.toHandle((function(){o.delete()}))),null!==e&&e.push(this.rawDestructor,t)}break;default:rr("Unsupporting sharing policy")}return t}function Qr(e,r){if(null===r)return this.isReference&&rr("null is not a valid "+this.name),0;r.$$||rr('Cannot pass "'+ft(r)+'" as a '+this.name),r.$$.ptr||rr("Cannot pass deleted object as a pointer of type "+this.name),r.$$.ptrType.isConst&&rr("Cannot convert argument of type "+r.$$.ptrType.name+" to parameter type "+this.name);var t=r.$$.ptrType.registeredClass;return qr(r.$$.ptr,t,this.registeredClass)}function Kr(e){return this.rawGetPointee&&(e=this.rawGetPointee(e)),e}function Jr(e){this.rawDestructor&&this.rawDestructor(e)}function Zr(e){null!==e&&e.delete()}function et(e,r,t,n,o,a,i,s,u,c,l){this.name=e,this.registeredClass=r,this.isReference=t,this.isConst=n,this.isSmartPointer=o,this.pointeeType=a,this.sharingPolicy=i,this.rawGetPointee=s,this.rawConstructor=u,this.rawShare=c,this.rawDestructor=l,o||void 0!==r.baseClass?this.toWireType=Xr:n?(this.toWireType=Yr,this.destructorFunction=null):(this.toWireType=Qr,this.destructorFunction=null)}function rt(e,r,t){o.hasOwnProperty(e)||Tr("Replacing nonexistant public symbol"),void 0!==o[e].overloadTable&&void 0!==t?o[e].overloadTable[t]=r:(o[e]=r,o[e].argCount=t)}var tt=[];function nt(e){var r=tt[e];return r||(e>=tt.length&&(tt.length=e+1),tt[e]=r=X.get(e)),A(X.get(e)==r,"JavaScript-side Wasm function table mirror is out of date!"),r}function ot(e,r,t){return e.includes("j")?function(e,r,t){A("dynCall_"+e in o,"bad function pointer type - dynCall function not found for sig '"+e+"'"),t&&t.length?A(t.length===e.substring(1).replace(/j/g,"--").length):A(1==e.length);var n=o["dynCall_"+e];return t&&t.length?n.apply(null,[r].concat(t)):n.call(null,r)}(e,r,t):(A(nt(r),"missing table entry in dynCall: "+r),nt(r).apply(null,t))}function at(e,r){var t=(e=sr(e)).includes("j")?function(e,r){A(e.includes("j")||e.includes("p"),"getDynCaller should only be called with i64 sigs");var t=[];return function(){return t.length=0,Object.assign(t,arguments),ot(e,r,t)}}(e,r):nt(r);return"function"!=typeof t&&rr("unknown function pointer with signature "+e+": "+r),t}var it=void 0;function st(e,r){var t=[],n={};throw r.forEach((function e(r){n[r]||vr[r]||(Br[r]?Br[r].forEach(e):(t.push(r),n[r]=!0))})),new it(e+": "+t.map(hr).join([", "]))}function ut(e,r,t,n,o){var a=r.length;a<2&&rr("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var i=null!==r[1]&&null!==t,s=!1,u=1;u>2]);return t}function lt(e,r,t){return e instanceof Object||rr(t+' with invalid "this": '+e),e instanceof r.registeredClass.constructor||rr(t+' incompatible with "this" of type '+e.constructor.name),e.$$.ptr||rr("cannot call emscripten binding method "+t+" on deleted object"),qr(e.$$.ptr,e.$$.ptrType.registeredClass,r.registeredClass)}function dt(e){e>4&&0==--Ke[e].refcount&&(Ke[e]=void 0,Je.push(e))}function ft(e){if(null===e)return"null";var r=typeof e;return"object"===r||"array"===r||"function"===r?e.toString():""+e}function mt(e,r){switch(r){case 2:return function(e){return this.fromWireType(j[e>>2])};case 3:return function(e){return this.fromWireType(U[e>>3])};default:throw new TypeError("Unknown float type: "+e)}}function pt(e,r,t){switch(r){case 0:return t?function(e){return B[e]}:function(e){return M[e]};case 1:return t?function(e){return O[e>>1]}:function(e){return R[e>>1]};case 2:return t?function(e){return I[e>>2]}:function(e){return N[e>>2]};default:throw new TypeError("Unknown integer type: "+e)}}var gt="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;function vt(e,r){A(e%2==0,"Pointer passed to UTF16ToString must be aligned to two bytes!");for(var t=e,n=t>>1,o=n+r/2;!(n>=o)&&R[n];)++n;if((t=n<<1)-e>32&>)return gt.decode(M.subarray(e,t));for(var a="",i=0;!(i>=r/2);++i){var s=O[e+2*i>>1];if(0==s)break;a+=String.fromCharCode(s)}return a}function ht(e,r,t){if(A(r%2==0,"Pointer passed to stringToUTF16 must be aligned to two bytes!"),A("number"==typeof t,"stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),void 0===t&&(t=2147483647),t<2)return 0;for(var n=r,o=(t-=2)<2*e.length?t/2:e.length,a=0;a>1]=i,r+=2}return O[r>>1]=0,r-n}function yt(e){return 2*e.length}function bt(e,r){A(e%4==0,"Pointer passed to UTF32ToString must be aligned to four bytes!");for(var t=0,n="";!(t>=r/4);){var o=I[e+4*t>>2];if(0==o)break;if(++t,o>=65536){var a=o-65536;n+=String.fromCharCode(55296|a>>10,56320|1023&a)}else n+=String.fromCharCode(o)}return n}function wt(e,r,t){if(A(r%4==0,"Pointer passed to stringToUTF32 must be aligned to four bytes!"),A("number"==typeof t,"stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),void 0===t&&(t=2147483647),t<4)return 0;for(var n=r,o=n+t-4,a=0;a=55296&&i<=57343)i=65536+((1023&i)<<10)|1023&e.charCodeAt(++a);if(I[r>>2]=i,(r+=4)+4>o)break}return I[r>>2]=0,r-n}function _t(e){for(var r=0,t=0;t=55296&&n<=57343&&++t,r+=4}return r}var Et={};function xt(e){var r=Et[e];return void 0===r?sr(e):r}var Ct=[];function Tt(){if("object"==typeof globalThis)return globalThis;function e(e){e.$$$embind_global$$$=e;var r="object"==typeof $$$embind_global$$$&&e.$$$embind_global$$$==e;return r||delete e.$$$embind_global$$$,r}if("object"==typeof $$$embind_global$$$)return $$$embind_global$$$;if("object"==typeof global&&e(global)?$$$embind_global$$$=global:"object"==typeof self&&e(self)&&($$$embind_global$$$=self),"object"==typeof $$$embind_global$$$)return $$$embind_global$$$;throw Error("unable to get global object.")}var St=[];function Pt(e){return N[e>>2]+4294967296*I[e+4>>2]}function kt(e){return e%4==0&&(e%100!=0||e%400==0)}var Ft=[0,31,60,91,121,152,182,213,244,274,305,335],Lt=[0,31,59,90,120,151,181,212,243,273,304,334];function At(e){return(kt(e.getFullYear())?Ft:Lt)[e.getMonth()]+e.getDate()-1}function Dt(e){var r=H(e)+1,t=En(r);return t&&G(e,B,t,r),t}var Bt=[];function Mt(e,r,t){var n=function(e,r){var t;for(A(Array.isArray(Bt)),A(r%16==0),Bt.length=0,r>>=2;t=M[e++];){var n=String.fromCharCode(t),o=["d","f","i"];A(o.includes(n),"Invalid character "+t+'("'+n+'") in readEmAsmArgs! Use only ['+o+'], and do not specify "v" for void return argument.'),r+=105!=t&r,Bt.push(105==t?I[r]:U[r++>>1]),++r}return Bt}(r,t);return Ee.hasOwnProperty(e)||de("No EM_ASM constant found at address "+e),Ee[e].apply(null,n)}function Ot(e){try{return P.grow(e-D.byteLength+65535>>>16),q(P.buffer),1}catch(r){E("emscripten_realloc_buffer: Attempted to grow heap from "+D.byteLength+" bytes to "+e+" bytes, but got error: "+r)}}function Rt(e){return de("Cannot use convertFrameToPC (needed by __builtin_return_address) without -sUSE_OFFSET_CONVERTER"),0}var It={};function Nt(e){e.forEach((e=>{var r=Rt();r&&(It[r]=e)}))}function jt(){var e=new Error;if(!e.stack){try{throw new Error}catch(r){e=r}if(!e.stack)return"(no stack trace available)"}return e.stack.toString()}var Ut={counter:1,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],byteSizeByTypeRoot:5120,byteSizeByType:[1,1,2,2,4,4,4,2,3,4,8],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function(e){Ut.lastError||(Ut.lastError=e)},getNewId:function(e){for(var r=Ut.counter++,t=e.length;t>1,c=new Uint16Array(u),l=(n=0,0);!(c[n++]=l,n>=u||(c[n++]=l+1,n>=u)||(c[n++]=l+2,n>=u)||(c[n++]=l,n>=u)||(c[n++]=l+2,n>=u)||(c[n++]=l+3,n>=u));)l+=4;r.GLctx.bufferData(34963,c,35044),r.GLctx.bindBuffer(34963,null)}},getTempVertexBuffer:function(e){var r=Ut.log2ceilLookup(e),t=Ut.currentContext.tempVertexBuffers1[r],n=Ut.currentContext.tempVertexBufferCounters1[r];Ut.currentContext.tempVertexBufferCounters1[r]=Ut.currentContext.tempVertexBufferCounters1[r]+1&Ut.numTempVertexBuffersPerSize-1;var o=t[n];if(o)return o;var a=fn.getParameter(34964);return t[n]=fn.createBuffer(),fn.bindBuffer(34962,t[n]),fn.bufferData(34962,1<>2]:-1;o+=z(I[t+4*a>>2],i<0?void 0:i)}return o},calcBufLength:function(e,r,t,n){return t>0?n*t:e*Ut.byteSizeByType[r-Ut.byteSizeByTypeRoot]*n},usedTempBuffers:[],preDrawHandleClientVertexAttribBindings:function(e){Ut.resetBufferBinding=!1;for(var r=0;r1?e.getContext("webgl2",r):e.getContext("webgl",r);return t?Ut.registerContext(t,r):0},enableOffscreenFramebufferAttributes:function(e){e.renderViaOffscreenBackBuffer=!0,e.preserveDrawingBuffer=!0},createOffscreenFramebuffer:function(e){var r=e.GLctx,t=r.createFramebuffer();if(r.bindFramebuffer(36160,t),e.defaultFbo=t,e.defaultFboForbidBlitFramebuffer=!1,r.getContextAttributes().antialias)e.defaultFboForbidBlitFramebuffer=!0;else{var n=navigator.userAgent.toLowerCase().match(/firefox\/(\d\d)/);if(null!=n){var o=n[1];e.defaultFboForbidBlitFramebuffer=o<67}}e.defaultColorTarget=r.createTexture(),e.defaultDepthTarget=r.createRenderbuffer(),Ut.resizeOffscreenFramebuffer(e),r.bindTexture(3553,e.defaultColorTarget),r.texParameteri(3553,10241,9728),r.texParameteri(3553,10240,9728),r.texParameteri(3553,10242,33071),r.texParameteri(3553,10243,33071),r.texImage2D(3553,0,6408,r.canvas.width,r.canvas.height,0,6408,5121,null),r.framebufferTexture2D(36160,36064,3553,e.defaultColorTarget,0),r.bindTexture(3553,null);r.createRenderbuffer();r.bindRenderbuffer(36161,e.defaultDepthTarget),r.renderbufferStorage(36161,33189,r.canvas.width,r.canvas.height),r.framebufferRenderbuffer(36160,36096,36161,e.defaultDepthTarget),r.bindRenderbuffer(36161,null);var a=r.createBuffer();r.bindBuffer(34962,a),r.bufferData(34962,new Float32Array([-1,-1,-1,1,1,-1,1,1]),35044),r.bindBuffer(34962,null),e.blitVB=a;var i=r.createShader(35633);r.shaderSource(i,"attribute vec2 pos;varying lowp vec2 tex;void main() { tex = pos * 0.5 + vec2(0.5,0.5); gl_Position = vec4(pos, 0.0, 1.0); }"),r.compileShader(i);var s=r.createShader(35632);r.shaderSource(s,"varying lowp vec2 tex;uniform sampler2D sampler;void main() { gl_FragColor = texture2D(sampler, tex); }"),r.compileShader(s);var u=r.createProgram();r.attachShader(u,i),r.attachShader(u,s),r.linkProgram(u),e.blitProgram=u,e.blitPosLoc=r.getAttribLocation(u,"pos"),r.useProgram(u),r.uniform1i(r.getUniformLocation(u,"sampler"),0),r.useProgram(null),e.defaultVao=void 0,r.createVertexArray&&(e.defaultVao=r.createVertexArray(),r.bindVertexArray(e.defaultVao),r.enableVertexAttribArray(e.blitPosLoc),r.bindVertexArray(null))},resizeOffscreenFramebuffer:function(e){var r=e.GLctx;if(e.defaultColorTarget){var t=r.getParameter(32873);r.bindTexture(3553,e.defaultColorTarget),r.texImage2D(3553,0,6408,r.drawingBufferWidth,r.drawingBufferHeight,0,6408,5121,null),r.bindTexture(3553,t)}if(e.defaultDepthTarget){var n=r.getParameter(36007);r.bindRenderbuffer(36161,e.defaultDepthTarget),r.renderbufferStorage(36161,33189,r.drawingBufferWidth,r.drawingBufferHeight),r.bindRenderbuffer(36161,n)}},blitOffscreenFramebuffer:function(e){var r=e.GLctx,t=r.getParameter(3089);t&&r.disable(3089);var n=r.getParameter(36006);if(r.blitFramebuffer&&!e.defaultFboForbidBlitFramebuffer)r.bindFramebuffer(36008,e.defaultFbo),r.bindFramebuffer(36009,null),r.blitFramebuffer(0,0,r.canvas.width,r.canvas.height,0,0,r.canvas.width,r.canvas.height,16384,9728);else{r.bindFramebuffer(36160,null);var o=r.getParameter(35725);r.useProgram(e.blitProgram);var a=r.getParameter(34964);r.bindBuffer(34962,e.blitVB);var i=r.getParameter(34016);r.activeTexture(33984);var s=r.getParameter(32873);r.bindTexture(3553,e.defaultColorTarget);var u=r.getParameter(3042);u&&r.disable(3042);var c=r.getParameter(2884);c&&r.disable(2884);var l=r.getParameter(2929);l&&r.disable(2929);var d=r.getParameter(2960);function f(){r.vertexAttribPointer(e.blitPosLoc,2,5126,!1,0,0),r.drawArrays(5,0,4)}if(d&&r.disable(2960),e.defaultVao){var m=r.getParameter(34229);r.bindVertexArray(e.defaultVao),f(),r.bindVertexArray(m)}else{for(var p={buffer:r.getVertexAttrib(e.blitPosLoc,34975),size:r.getVertexAttrib(e.blitPosLoc,34339),stride:r.getVertexAttrib(e.blitPosLoc,34340),type:r.getVertexAttrib(e.blitPosLoc,34341),normalized:r.getVertexAttrib(e.blitPosLoc,34922),pointer:r.getVertexAttribOffset(e.blitPosLoc,34373)},g=r.getParameter(34921),v=[],h=0;h=2&&(t.disjointTimerQueryExt=t.getExtension("EXT_disjoint_timer_query_webgl2")),(e.version<2||!t.disjointTimerQueryExt)&&(t.disjointTimerQueryExt=t.getExtension("EXT_disjoint_timer_query")),function(e){e.multiDrawWebgl=e.getExtension("WEBGL_multi_draw")}(t),(t.getSupportedExtensions()||[]).forEach((function(e){e.includes("lose_context")||e.includes("debug")||t.getExtension(e)}))}}},Vt={inEventHandler:0,removeAllEventListeners:function(){for(var e=Vt.eventHandlers.length-1;e>=0;--e)Vt._removeHandler(e);Vt.eventHandlers=[],Vt.deferredCalls=[]},registerRemoveEventListeners:function(){Vt.removeEventListenersRegistered||(ee.push(Vt.removeAllEventListeners),Vt.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(e,r,t){function n(e,r){if(e.length!=r.length)return!1;for(var t in e)if(e[t]!=r[t])return!1;return!0}for(var o in Vt.deferredCalls){var a=Vt.deferredCalls[o];if(a.targetFunction==e&&n(a.argsList,t))return}Vt.deferredCalls.push({targetFunction:e,precedence:r,argsList:t}),Vt.deferredCalls.sort((function(e,r){return e.precedence>2,n=I[t+6],o={alpha:!!I[t+0],depth:!!I[t+1],stencil:!!I[t+2],antialias:!!I[t+3],premultipliedAlpha:!!I[t+4],preserveDrawingBuffer:!!I[t+5],powerPreference:$t[n],failIfMajorPerformanceCaveat:!!I[t+7],majorVersion:I[t+8],minorVersion:I[t+9],enableExtensionsByDefault:I[t+10],explicitSwapControl:I[t+11],proxyContextToMainThread:I[t+12],renderViaOffscreenBackBuffer:I[t+13]},a=Gt(e);if(!a)return 0;if(a.offscreenCanvas&&(a=a.offscreenCanvas),o.explicitSwapControl&&(a.transferControlToOffscreen||"undefined"!=typeof OffscreenCanvas&&a instanceof OffscreenCanvas||o.renderViaOffscreenBackBuffer||(o.renderViaOffscreenBackBuffer=!0),a.transferControlToOffscreen)){if(a.controlTransferredOffscreen){if(!Ut.offscreenCanvases[a.id])return 0}else Ut.offscreenCanvases[a.id]={canvas:a.transferControlToOffscreen(),canvasSharedPtr:En(12),id:a.id},a.controlTransferredOffscreen=!0;a=Ut.offscreenCanvases[a.id]}return Ut.createContext(a,o)};var Ht=function(){return Ut.currentContext?Ut.currentContext.handle:0};var qt={initManagers:function(){function e(){this.objects={},this.nextId=1,this.create=function(e,r){r=r||{};var t=this.nextId++;return A(void 0===this.objects[t]),r.refcount=1,r.object=e,this.objects[t]=r,t},this.get=function(e){if(e){var r=this.objects[e];return A(void 0!==r),r.object}},this.reference=function(e){var r=this.objects[e];A(void 0!==r),r.refcount++},this.release=function(e){var r=this.objects[e];A(void 0!==r),A(r.refcount>0),r.refcount--,r.refcount<=0&&delete this.objects[e]}}qt.mgrDevice||(qt.mgrSurface=qt.mgrSurface||new e,qt.mgrSwapChain=qt.mgrSwapChain||new e,qt.mgrAdapter=qt.mgrAdapter||new e,qt.mgrDevice=qt.mgrDevice||new e,qt.mgrQueue=qt.mgrQueue||new e,qt.mgrCommandBuffer=qt.mgrCommandBuffer||new e,qt.mgrCommandEncoder=qt.mgrCommandEncoder||new e,qt.mgrRenderPassEncoder=qt.mgrRenderPassEncoder||new e,qt.mgrComputePassEncoder=qt.mgrComputePassEncoder||new e,qt.mgrBindGroup=qt.mgrBindGroup||new e,qt.mgrBuffer=qt.mgrBuffer||new e,qt.mgrSampler=qt.mgrSampler||new e,qt.mgrTexture=qt.mgrTexture||new e,qt.mgrTextureView=qt.mgrTextureView||new e,qt.mgrQuerySet=qt.mgrQuerySet||new e,qt.mgrBindGroupLayout=qt.mgrBindGroupLayout||new e,qt.mgrPipelineLayout=qt.mgrPipelineLayout||new e,qt.mgrRenderPipeline=qt.mgrRenderPipeline||new e,qt.mgrComputePipeline=qt.mgrComputePipeline||new e,qt.mgrShaderModule=qt.mgrShaderModule||new e,qt.mgrRenderBundleEncoder=qt.mgrRenderBundleEncoder||new e,qt.mgrRenderBundle=qt.mgrRenderBundle||new e)},makeColor:function(e){return{r:U[e>>3],g:U[e+8>>3],b:U[e+16>>3],a:U[e+24>>3]}},makeExtent3D:function(e){return{width:N[e>>2],height:N[e+4>>2],depthOrArrayLayers:N[e+8>>2]}},makeOrigin3D:function(e){return{x:N[e>>2],y:N[e+4>>2],z:N[e+8>>2]}},makeImageCopyTexture:function(e){return A(e),A(0===N[e>>2]),{texture:qt.mgrTexture.get(N[e+4>>2]),mipLevel:N[e+8>>2],origin:qt.makeOrigin3D(e+12),aspect:qt.TextureAspect[N[e+24>>2]]}},makeTextureDataLayout:function(e){A(e),A(0===N[e>>2]);var r=N[e+16>>2],t=N[e+20>>2];return{offset:4294967296*N[e+4+8>>2]+N[e+8>>2],bytesPerRow:4294967295===r?void 0:r,rowsPerImage:4294967295===t?void 0:t}},makeImageCopyBuffer:function(e){A(e),A(0===N[e>>2]);var r=e+8,t=qt.makeTextureDataLayout(r);return t.buffer=qt.mgrBuffer.get(N[e+32>>2]),t},makePipelineConstants:function(e,r){if(e){for(var t={},n=0;n>2])]=U[o+8>>3]}return t}},makeProgrammableStageDescriptor:function(e){if(e)return A(e),A(0===N[e>>2]),{module:qt.mgrShaderModule.get(N[e+4>>2]),entryPoint:z(N[e+8>>2]),constants:qt.makePipelineConstants(N[e+12>>2],N[e+16>>2])}},DeviceLostReason:{undefined:0,destroyed:1},PreferredFormat:{rgba8unorm:18,bgra8unorm:23},AddressMode:["repeat","mirror-repeat","clamp-to-edge"],BlendFactor:["zero","one","src","one-minus-src","src-alpha","one-minus-src-alpha","dst","one-minus-dst","dst-alpha","one-minus-dst-alpha","src-alpha-saturated","constant","one-minus-constant"],BlendOperation:["add","subtract","reverse-subtract","min","max"],BufferBindingType:[,"uniform","storage","read-only-storage"],CompareFunction:[,"never","less","less-equal","greater","greater-equal","equal","not-equal","always"],CompilationInfoRequestStatus:["success","error","device-lost","unknown"],ComputePassTimestampLocation:["beginning","end"],CullMode:["none","front","back"],ErrorFilter:["validation","out-of-memory"],FeatureName:[,"depth-clip-control","depth32float-stencil8","timestamp-query","pipeline-statistics-query","texture-compression-bc","texture-compression-etc2","texture-compression-astc","indirect-first-instance"],FilterMode:["nearest","linear"],FrontFace:["ccw","cw"],IndexFormat:[,"uint16","uint32"],LoadOp:[,"clear","load"],PipelineStatisticName:["vertex-shader-invocations","clipper-invocations","clipper-primitives-out","fragment-shader-invocations","compute-shader-invocations"],PowerPreference:[,"low-power","high-performance"],PrimitiveTopology:["point-list","line-list","line-strip","triangle-list","triangle-strip"],QueryType:["occlusion","pipeline-statistics","timestamp"],RenderPassTimestampLocation:["beginning","end"],SamplerBindingType:[,"filtering","non-filtering","comparison"],StencilOperation:["keep","zero","replace","invert","increment-clamp","decrement-clamp","increment-wrap","decrement-wrap"],StorageTextureAccess:[,"write-only"],StoreOp:[,"store","discard"],TextureAspect:["all","stencil-only","depth-only"],TextureComponentType:["float","sint","uint","depth-comparison"],TextureDimension:["1d","2d","3d"],TextureFormat:[,"r8unorm","r8snorm","r8uint","r8sint","r16uint","r16sint","r16float","rg8unorm","rg8snorm","rg8uint","rg8sint","r32float","r32uint","r32sint","rg16uint","rg16sint","rg16float","rgba8unorm","rgba8unorm-srgb","rgba8snorm","rgba8uint","rgba8sint","bgra8unorm","bgra8unorm-srgb","rgb10a2unorm","rg11b10ufloat","rgb9e5ufloat","rg32float","rg32uint","rg32sint","rgba16uint","rgba16sint","rgba16float","rgba32float","rgba32uint","rgba32sint","stencil8","depth16unorm","depth24plus","depth24plus-stencil8","depth32float","depth32float-stencil8","bc1-rgba-unorm","bc1-rgba-unorm-srgb","bc2-rgba-unorm","bc2-rgba-unorm-srgb","bc3-rgba-unorm","bc3-rgba-unorm-srgb","bc4-r-unorm","bc4-r-snorm","bc5-rg-unorm","bc5-rg-snorm","bc6h-rgb-ufloat","bc6h-rgb-float","bc7-rgba-unorm","bc7-rgba-unorm-srgb","etc2-rgb8unorm","etc2-rgb8unorm-srgb","etc2-rgb8a1unorm","etc2-rgb8a1unorm-srgb","etc2-rgba8unorm","etc2-rgba8unorm-srgb","eac-r11unorm","eac-r11snorm","eac-rg11unorm","eac-rg11snorm","astc-4x4-unorm","astc-4x4-unorm-srgb","astc-5x4-unorm","astc-5x4-unorm-srgb","astc-5x5-unorm","astc-5x5-unorm-srgb","astc-6x5-unorm","astc-6x5-unorm-srgb","astc-6x6-unorm","astc-6x6-unorm-srgb","astc-8x5-unorm","astc-8x5-unorm-srgb","astc-8x6-unorm","astc-8x6-unorm-srgb","astc-8x8-unorm","astc-8x8-unorm-srgb","astc-10x5-unorm","astc-10x5-unorm-srgb","astc-10x6-unorm","astc-10x6-unorm-srgb","astc-10x8-unorm","astc-10x8-unorm-srgb","astc-10x10-unorm","astc-10x10-unorm-srgb","astc-12x10-unorm","astc-12x10-unorm-srgb","astc-12x12-unorm","astc-12x12-unorm-srgb"],TextureSampleType:[,"float","unfilterable-float","depth","sint","uint"],TextureViewDimension:[,"1d","2d","2d-array","cube","cube-array","3d"],VertexFormat:[,"uint8x2","uint8x4","sint8x2","sint8x4","unorm8x2","unorm8x4","snorm8x2","snorm8x4","uint16x2","uint16x4","sint16x2","sint16x4","unorm16x2","unorm16x4","snorm16x2","snorm16x4","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4"],VertexStepMode:["vertex","instance"],FeatureNameString2Enum:{undefined:"0","depth-clip-control":"1","depth32float-stencil8":"2","timestamp-query":"3","pipeline-statistics-query":"4","texture-compression-bc":"5","texture-compression-etc2":"6","texture-compression-astc":"7","indirect-first-instance":"8"}},Yt={values:{},next_id:1,add:function(e){var r;do{r=Yt.next_id++,Yt.next_id>2147483647&&(Yt.next_id=1)}while(r in Yt.values);return Yt.values[r]=e,r},remove:function(e){A(e in Yt.values),delete Yt.values[e]},get:function(e){return A(0===e||e in Yt.values),Yt.values[e]}};var Xt={};function Qt(){if(!Qt.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:s||"./this.program"};for(var r in Xt)void 0===Xt[r]?delete e[r]:e[r]=Xt[r];var t=[];for(var r in e)t.push(r+"="+e[r]);Qt.strings=t}return Qt.strings}var Kt=[];function Jt(e,r,t,n){for(var o=0;o>2]=i}}function Zt(e,r){N[e>>2]=r,N[e+4>>2]=(r-N[e>>2])/4294967296;var t=r>=0?function(e){return N[e>>2]+4294967296*N[e+4>>2]}(e):Pt(e);t!=r&&Ve("writeI53ToI64() out of range: serialized JS Number "+r+" to Wasm heap as bytes lo="+Ge(N[e>>2])+", hi="+Ge(N[e+4>>2])+", which deserializes back to "+t+" instead!")}function en(e){var r=H(e)+1,t=En(r);return W(e,t,r),t}function rn(e){return"]"==e.slice(-1)&&e.lastIndexOf("[")}function tn(e){return 0==(e-=5120)?B:1==e?M:2==e?O:4==e?I:6==e?j:5==e||28922==e||28520==e||30779==e||30782==e?N:R}function nn(e){return 31-Math.clz32(e.BYTES_PER_ELEMENT)}function on(e,r,t,n,o,a){var i=tn(e),s=nn(i),u=1<>s,o+l>>s)}function an(e){var r=fn.currentProgram;if(r){var t=r.uniformLocsById[e];return"number"==typeof t&&(r.uniformLocsById[e]=t=fn.getUniformLocation(r,r.uniformArrayNamesById[e]+(t>0?"["+t+"]":""))),t}Ut.recordError(1282)}var sn=[];var un=[];var cn=[31,29,31,30,31,30,31,31,30,31,30,31],ln=[31,28,31,30,31,30,31,31,30,31,30,31];function dn(e,r,t,n){var o=I[n+40>>2],a={tm_sec:I[n>>2],tm_min:I[n+4>>2],tm_hour:I[n+8>>2],tm_mday:I[n+12>>2],tm_mon:I[n+16>>2],tm_year:I[n+20>>2],tm_wday:I[n+24>>2],tm_yday:I[n+28>>2],tm_isdst:I[n+32>>2],tm_gmtoff:I[n+36>>2],tm_zone:o?z(o):""},i=z(t),s={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var u in s)i=i.replace(new RegExp(u,"g"),s[u]);var c=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],l=["January","February","March","April","May","June","July","August","September","October","November","December"];function d(e,r,t){for(var n="number"==typeof e?e.toString():e||"";n.length0?1:0}var n;return 0===(n=t(e.getFullYear()-r.getFullYear()))&&0===(n=t(e.getMonth()-r.getMonth()))&&(n=t(e.getDate()-r.getDate())),n}function p(e){switch(e.getDay()){case 0:return new Date(e.getFullYear()-1,11,29);case 1:return e;case 2:return new Date(e.getFullYear(),0,3);case 3:return new Date(e.getFullYear(),0,2);case 4:return new Date(e.getFullYear(),0,1);case 5:return new Date(e.getFullYear()-1,11,31);case 6:return new Date(e.getFullYear()-1,11,30)}}function g(e){var r=function(e,r){for(var t=new Date(e.getTime());r>0;){var n=kt(t.getFullYear()),o=t.getMonth(),a=(n?cn:ln)[o];if(!(r>a-t.getDate()))return t.setDate(t.getDate()+r),t;r-=a-t.getDate()+1,t.setDate(1),o<11?t.setMonth(o+1):(t.setMonth(0),t.setFullYear(t.getFullYear()+1))}return t}(new Date(e.tm_year+1900,0,1),e.tm_yday),t=new Date(r.getFullYear(),0,4),n=new Date(r.getFullYear()+1,0,4),o=p(t),a=p(n);return m(o,r)<=0?m(a,r)<=0?r.getFullYear()+1:r.getFullYear():r.getFullYear()-1}var v={"%a":function(e){return c[e.tm_wday].substring(0,3)},"%A":function(e){return c[e.tm_wday]},"%b":function(e){return l[e.tm_mon].substring(0,3)},"%B":function(e){return l[e.tm_mon]},"%C":function(e){return f((e.tm_year+1900)/100|0,2)},"%d":function(e){return f(e.tm_mday,2)},"%e":function(e){return d(e.tm_mday,2," ")},"%g":function(e){return g(e).toString().substring(2)},"%G":function(e){return g(e)},"%H":function(e){return f(e.tm_hour,2)},"%I":function(e){var r=e.tm_hour;return 0==r?r=12:r>12&&(r-=12),f(r,2)},"%j":function(e){return f(e.tm_mday+function(e,r){for(var t=0,n=0;n<=r;t+=e[n++]);return t}(kt(e.tm_year+1900)?cn:ln,e.tm_mon-1),3)},"%m":function(e){return f(e.tm_mon+1,2)},"%M":function(e){return f(e.tm_min,2)},"%n":function(){return"\n"},"%p":function(e){return e.tm_hour>=0&&e.tm_hour<12?"AM":"PM"},"%S":function(e){return f(e.tm_sec,2)},"%t":function(){return"\t"},"%u":function(e){return e.tm_wday||7},"%U":function(e){var r=e.tm_yday+7-e.tm_wday;return f(Math.floor(r/7),2)},"%V":function(e){var r=Math.floor((e.tm_yday+7-(e.tm_wday+6)%7)/7);if((e.tm_wday+371-e.tm_yday-2)%7<=2&&r++,r){if(53==r){var t=(e.tm_wday+371-e.tm_yday)%7;4==t||3==t&&kt(e.tm_year)||(r=1)}}else{r=52;var n=(e.tm_wday+7-e.tm_yday-1)%7;(4==n||5==n&&kt(e.tm_year%400-1))&&r++}return f(r,2)},"%w":function(e){return e.tm_wday},"%W":function(e){var r=e.tm_yday+7-(e.tm_wday+6)%7;return f(Math.floor(r/7),2)},"%y":function(e){return(e.tm_year+1900).toString().substring(2)},"%Y":function(e){return e.tm_year+1900},"%z":function(e){var r=e.tm_gmtoff,t=r>=0;return r=(r=Math.abs(r)/60)/60*100+r%60,(t?"+":"-")+String("0000"+r).slice(-4)},"%Z":function(e){return e.tm_zone},"%%":function(){return"%"}};for(var u in i=i.replace(/%%/g,"\0\0"),v)i.includes(u)&&(i=i.replace(new RegExp(u,"g"),v[u](a)));var h=ke(i=i.replace(/\0\0/g,"%"),!1);return h.length>r?0:(function(e,r){A(e.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)"),B.set(e,r)}(h,e),h.length-1)}o.requestFullscreen=function(e,r){$e.requestFullscreen(e,r)},o.requestFullScreen=function(){$e.requestFullScreen()},o.requestAnimationFrame=function(e){$e.requestAnimationFrame(e)},o.setCanvasSize=function(e,r,t){$e.setCanvasSize(e,r,t)},o.pauseMainLoop=function(){$e.mainLoop.pause()},o.resumeMainLoop=function(){$e.mainLoop.resume()},o.getUserMedia=function(){$e.getUserMedia()},o.createContext=function(e,r,t,n){return $e.createContext(e,r,t,n)};var fn,mn={},pn={},gn=function(e,r,t,n){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=Oe.nextInode++,this.name=r,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=n},vn=365,hn=146;Object.defineProperties(gn.prototype,{read:{get:function(){return(this.mode&vn)===vn},set:function(e){e?this.mode|=vn:this.mode&=-366}},write:{get:function(){return(this.mode&hn)===hn},set:function(e){e?this.mode|=hn:this.mode&=-147}},isFolder:{get:function(){return Oe.isDir(this.mode)}},isDevice:{get:function(){return Oe.isChrdev(this.mode)}}}),Oe.FSNode=gn,Oe.staticInit(),o.FS_createPath=Oe.createPath,o.FS_createDataFile=Oe.createDataFile,o.FS_createPreloadedFile=Oe.createPreloadedFile,o.FS_unlink=Oe.unlink,o.FS_createLazyFile=Oe.createLazyFile,o.FS_createDevice=Oe.createDevice,Be={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},er=o.BindingError=Ze(Error,"BindingError"),o.count_emval_handles=tr,o.get_first_emval=nr,ar=o.PureVirtualError=Ze(Error,"PureVirtualError"),function(){for(var e=new Array(256),r=0;r<256;++r)e[r]=String.fromCharCode(r);ir=e}(),o.getInheritedInstanceCount=ur,o.getLiveInheritedInstances=cr,o.flushPendingDeletes=dr,o.setDelayFunction=mr,Cr=o.InternalError=Ze(Error,"InternalError"),zr.prototype.isAliasOf=Ir,zr.prototype.clone=jr,zr.prototype.delete=Ur,zr.prototype.isDeleted=Vr,zr.prototype.deleteLater=$r,et.prototype.getPointee=Kr,et.prototype.destructor=Jr,et.prototype.argPackAdvance=8,et.prototype.readValueFromPointer=Ar,et.prototype.deleteObject=Zr,et.prototype.fromWireType=Pr,it=o.UnboundTypeError=Ze(Error,"UnboundTypeError"),qt.initManagers();for(var yn=0;yn<32;++yn)Kt.push(new Array(yn));var bn=new Float32Array(288);for(yn=0;yn<288;++yn)sn[yn]=bn.subarray(0,yn+1);var wn=new Int32Array(288);for(yn=0;yn<288;++yn)un[yn]=wn.subarray(0,yn+1);"function"==typeof atob&&atob;var _n={HaveOffsetConverter:function(){return"undefined"!=typeof wasmOffsetConverter},__assert_fail:function(e,r,t,n){de("Assertion failed: "+z(e)+", at: "+[r?z(r):"unknown filename",t,n?z(n):"unknown function"])},__cxa_allocate_exception:function(e){return En(e+24)+24},__cxa_throw:function(e,r,t){throw new We(e).init(r,t),e,e+" - Exception catching is disabled, this exception cannot be caught. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch."},__syscall_dup:function(e){try{var r=Re.getStreamFromFD(e);return Oe.createStream(r,0).fd}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},__syscall_fcntl64:function(e,r,t){Re.varargs=t;try{var n=Re.getStreamFromFD(e);switch(r){case 0:return(o=Re.get())<0?-28:Oe.createStream(n,o).fd;case 1:case 2:case 6:case 7:return 0;case 3:return n.flags;case 4:var o=Re.get();return n.flags|=o,0;case 5:o=Re.get();return O[o+0>>1]=2,0;case 16:case 8:default:return-28;case 9:return a=28,I[Cn()>>2]=a,-1}}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}var a},__syscall_fstat64:function(e,r){try{var t=Re.getStreamFromFD(e);return Re.doStat(Oe.stat,t.path,r)}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},__syscall_ioctl:function(e,r,t){Re.varargs=t;try{var n=Re.getStreamFromFD(e);switch(r){case 21509:case 21505:case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:case 21523:case 21524:return n.tty?0:-59;case 21519:if(!n.tty)return-59;var o=Re.get();return I[o>>2]=0,0;case 21520:return n.tty?-28:-59;case 21531:o=Re.get();return Oe.ioctl(n,r,o);default:return-28}}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},__syscall_lstat64:function(e,r){try{return e=Re.getStr(e),Re.doStat(Oe.lstat,e,r)}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},__syscall_newfstatat:function(e,r,t,n){try{r=Re.getStr(r);var o=256&n,a=4096&n;return A(!(n&=-6401),"unknown flags in __syscall_newfstatat: "+n),r=Re.calculateAt(e,r,a),Re.doStat(o?Oe.lstat:Oe.stat,r,t)}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},__syscall_openat:function(e,r,t,n){Re.varargs=n;try{r=Re.getStr(r),r=Re.calculateAt(e,r);var o=n?Re.get():0;return Oe.open(r,t,o).fd}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},__syscall_stat64:function(e,r){try{return e=Re.getStr(e),Re.doStat(Oe.stat,e,r)}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},_dlinit:function(e){},_dlopen_js:function(e,r){de(He)},_dlsym_js:function(e,r){de(He)},_embind_create_inheriting_constructor:function(e,r,t){e=sr(e),r=yr(r,"wrapper"),t=or.toValue(t);var n=[].slice,o=r.registeredClass,a=o.instancePrototype,i=o.baseClass.instancePrototype,s=o.baseClass.constructor,u=Qe(e,(function(){o.baseClass.pureVirtualFunctions.forEach(function(e){if(this[e]===i[e])throw new ar("Pure virtual function "+e+" must be implemented in JavaScript")}.bind(this)),Object.defineProperty(this,"__parent",{value:a}),this.__construct.apply(this,n.call(arguments))}));for(var c in a.__construct=function(){this===a&&rr("Pass correct 'this' to __construct");var e=s.implement.apply(void 0,[this].concat(n.call(arguments)));br(e);var r,t,i,u=e.$$;e.notifyOnDestruction(),u.preservePointerOnDelete=!0,Object.defineProperties(this,{$$:{value:u}}),kr(this),r=o,t=u.ptr,i=this,t=gr(r,t),pr.hasOwnProperty(t)?rr("Tried to register registered instance: "+t):pr[t]=i},a.__destruct=function(){var e,r;this===a&&rr("Pass correct 'this' to __destruct"),br(this),e=o,r=this.$$.ptr,r=gr(e,r),pr.hasOwnProperty(r)?delete pr[r]:rr("Tried to unregister unregistered instance: "+r)},u.prototype=Object.create(a),t)u.prototype[c]=t[c];return or.toHandle(u)},_embind_finalize_value_object:function(e){var r=Fr[e];delete Fr[e];var t=r.rawConstructor,n=r.rawDestructor,o=r.fields;Mr([e],o.map((e=>e.getterReturnType)).concat(o.map((e=>e.setterArgumentType))),(e=>{var a={};return o.forEach(((r,t)=>{var n=r.fieldName,i=e[t],s=r.getter,u=r.getterContext,c=e[t+o.length],l=r.setter,d=r.setterContext;a[n]={read:e=>i.fromWireType(s(u,e)),write:(e,r)=>{var t=[];l(d,e,c.toWireType(t,r)),Lr(t)}}})),[{name:r.name,fromWireType:function(e){var r={};for(var t in a)r[t]=a[t].read(e);return n(e),r},toWireType:function(e,r){for(var o in a)if(!(o in r))throw new TypeError('Missing field: "'+o+'"');var i=t();for(o in a)a[o].write(i,r[o]);return null!==e&&e.push(n,i),i},argPackAdvance:8,readValueFromPointer:Ar,destructorFunction:n}]}))},_embind_register_bigint:function(e,r,t,n,o){},_embind_register_bool:function(e,r,t,n,o){var a=Or(t);Rr(e,{name:r=sr(r),fromWireType:function(e){return!!e},toWireType:function(e,r){return r?n:o},argPackAdvance:8,readValueFromPointer:function(e){var n;if(1===t)n=B;else if(2===t)n=O;else{if(4!==t)throw new TypeError("Unknown boolean type size: "+r);n=I}return this.fromWireType(n[e>>a])},destructorFunction:null})},_embind_register_class:function(e,r,t,n,o,a,i,s,u,c,l,d,f){l=sr(l),a=at(o,a),s&&(s=at(i,s)),c&&(c=at(u,c)),f=at(d,f);var m=Xe(l);Wr(m,(function(){st("Cannot construct "+l+" due to unbound types",[n])})),Mr([e,r,t],n?[n]:[],(function(r){var t,o;r=r[0],o=n?(t=r.registeredClass).instancePrototype:zr.prototype;var i=Qe(m,(function(){if(Object.getPrototypeOf(this)!==u)throw new er("Use 'new' to construct "+l);if(void 0===d.constructor_body)throw new er(l+" has no accessible constructor");var e=d.constructor_body[arguments.length];if(void 0===e)throw new er("Tried to invoke ctor of "+l+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(d.constructor_body).toString()+") parameters instead!");return e.apply(this,arguments)})),u=Object.create(o,{constructor:{value:i}});i.prototype=u;var d=new Hr(l,i,u,f,t,a,s,c),p=new et(l,d,!0,!1,!1),g=new et(l+"*",d,!1,!1,!1),v=new et(l+" const*",d,!1,!0,!1);return xr[e]={pointerType:g,constPointerType:v},rt(m,i),[p,g,v]}))},_embind_register_class_class_function:function(e,r,t,n,o,a,i){var s=ct(t,n);r=sr(r),a=at(o,a),Mr([],[e],(function(e){var n=(e=e[0]).name+"."+r;function o(){st("Cannot call "+n+" due to unbound types",s)}r.startsWith("@@")&&(r=Symbol[r.substring(2)]);var u=e.registeredClass.constructor;return void 0===u[r]?(o.argCount=t-1,u[r]=o):(Gr(u,r,n),u[r].overloadTable[t-1]=o),Mr([],s,(function(e){var o=[e[0],null].concat(e.slice(1)),s=ut(n,o,null,a,i);return void 0===u[r].overloadTable?(s.argCount=t-1,u[r]=s):u[r].overloadTable[t-1]=s,[]})),[]}))},_embind_register_class_constructor:function(e,r,t,n,o,a){A(r>0);var i=ct(r,t);o=at(n,o),Mr([],[e],(function(e){var t="constructor "+(e=e[0]).name;if(void 0===e.registeredClass.constructor_body&&(e.registeredClass.constructor_body=[]),void 0!==e.registeredClass.constructor_body[r-1])throw new er("Cannot register multiple constructors with identical number of parameters ("+(r-1)+") for class '"+e.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");return e.registeredClass.constructor_body[r-1]=()=>{st("Cannot construct "+e.name+" due to unbound types",i)},Mr([],i,(function(n){return n.splice(1,0,null),e.registeredClass.constructor_body[r-1]=ut(t,n,null,o,a),[]})),[]}))},_embind_register_class_function:function(e,r,t,n,o,a,i,s){var u=ct(t,n);r=sr(r),a=at(o,a),Mr([],[e],(function(e){var n=(e=e[0]).name+"."+r;function o(){st("Cannot call "+n+" due to unbound types",u)}r.startsWith("@@")&&(r=Symbol[r.substring(2)]),s&&e.registeredClass.pureVirtualFunctions.push(r);var c=e.registeredClass.instancePrototype,l=c[r];return void 0===l||void 0===l.overloadTable&&l.className!==e.name&&l.argCount===t-2?(o.argCount=t-2,o.className=e.name,c[r]=o):(Gr(c,r,n),c[r].overloadTable[t-2]=o),Mr([],u,(function(o){var s=ut(n,o,e,a,i);return void 0===c[r].overloadTable?(s.argCount=t-2,c[r]=s):c[r].overloadTable[t-2]=s,[]})),[]}))},_embind_register_class_property:function(e,r,t,n,o,a,i,s,u,c){r=sr(r),o=at(n,o),Mr([],[e],(function(e){var n=(e=e[0]).name+"."+r,l={get:function(){st("Cannot access "+n+" due to unbound types",[t,i])},enumerable:!0,configurable:!0};return l.set=u?()=>{st("Cannot access "+n+" due to unbound types",[t,i])}:e=>{rr(n+" is a read-only property")},Object.defineProperty(e.registeredClass.instancePrototype,r,l),Mr([],u?[t,i]:[t],(function(t){var i=t[0],l={get:function(){var r=lt(this,e,n+" getter");return i.fromWireType(o(a,r))},enumerable:!0};if(u){u=at(s,u);var d=t[1];l.set=function(r){var t=lt(this,e,n+" setter"),o=[];u(c,t,d.toWireType(o,r)),Lr(o)}}return Object.defineProperty(e.registeredClass.instancePrototype,r,l),[]})),[]}))},_embind_register_emval:function(e,r){Rr(e,{name:r=sr(r),fromWireType:function(e){var r=or.toValue(e);return dt(e),r},toWireType:function(e,r){return or.toHandle(r)},argPackAdvance:8,readValueFromPointer:Ar,destructorFunction:null})},_embind_register_float:function(e,r,t){var n=Or(t);Rr(e,{name:r=sr(r),fromWireType:function(e){return e},toWireType:function(e,r){if("number"!=typeof r&&"boolean"!=typeof r)throw new TypeError('Cannot convert "'+ft(r)+'" to '+this.name);return r},argPackAdvance:8,readValueFromPointer:mt(r,n),destructorFunction:null})},_embind_register_function:function(e,r,t,n,o,a){var i=ct(r,t);e=sr(e),o=at(n,o),Wr(e,(function(){st("Cannot call "+e+" due to unbound types",i)}),r-1),Mr([],i,(function(t){var n=[t[0],null].concat(t.slice(1));return rt(e,ut(e,n,null,o,a),r-1),[]}))},_embind_register_integer:function(e,r,t,n,o){r=sr(r),-1===o&&(o=4294967295);var a=Or(t),i=e=>e;if(0===n){var s=32-8*t;i=e=>e<>>s}var u=r.includes("unsigned"),c=(e,t)=>{if("number"!=typeof e&&"boolean"!=typeof e)throw new TypeError('Cannot convert "'+ft(e)+'" to '+t);if(eo)throw new TypeError('Passing a number "'+ft(e)+'" from JS side to C/C++ side to an argument of type "'+r+'", which is outside the valid range ['+n+", "+o+"]!")};Rr(e,{name:r,fromWireType:i,toWireType:u?function(e,r){return c(r,this.name),r>>>0}:function(e,r){return c(r,this.name),r},argPackAdvance:8,readValueFromPointer:pt(r,a,0!==n),destructorFunction:null})},_embind_register_memory_view:function(e,r,t){var n=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][r];function o(e){var r=N,t=r[e>>=2],o=r[e+1];return new n(D,o,t)}Rr(e,{name:t=sr(t),fromWireType:o,argPackAdvance:8,readValueFromPointer:o},{ignoreDuplicateRegistrations:!0})},_embind_register_std_string:function(e,r){var t="std::string"===(r=sr(r));Rr(e,{name:r,fromWireType:function(e){var r,n=N[e>>2],o=e+4;if(t)for(var a=o,i=0;i<=n;++i){var s=o+i;if(i==n||0==M[s]){var u=z(a,s-a);void 0===r?r=u:(r+=String.fromCharCode(0),r+=u),a=s+1}}else{var c=new Array(n);for(i=0;i>2]=n,t&&o)W(r,i,n+1);else if(o)for(var s=0;s255&&(xn(i),rr("String has UTF-16 code units that do not fit in 8 bits")),M[i+s]=u}else for(s=0;sR,s=1):4===r&&(n=bt,o=wt,i=_t,a=()=>N,s=2),Rr(e,{name:t,fromWireType:function(e){for(var t,o=N[e>>2],i=a(),u=e+4,c=0;c<=o;++c){var l=e+4+c*r;if(c==o||0==i[l>>s]){var d=n(u,l-u);void 0===t?t=d:(t+=String.fromCharCode(0),t+=d),u=l+r}}return xn(e),t},toWireType:function(e,n){"string"!=typeof n&&rr("Cannot pass non-string to C++ string type "+t);var a=i(n),u=En(4+a+r);return N[u>>2]=a>>s,o(n,u+4,a+r),null!==e&&e.push(xn,u),u},argPackAdvance:8,readValueFromPointer:Ar,destructorFunction:function(e){xn(e)}})},_embind_register_value_object:function(e,r,t,n,o,a){Fr[e]={name:sr(r),rawConstructor:at(t,n),rawDestructor:at(o,a),fields:[]}},_embind_register_value_object_field:function(e,r,t,n,o,a,i,s,u,c){Fr[e].fields.push({fieldName:sr(r),getterReturnType:t,getter:at(n,o),getterContext:a,setterArgumentType:i,setter:at(s,u),setterContext:c})},_embind_register_void:function(e,r){Rr(e,{isVoid:!0,name:r=sr(r),argPackAdvance:0,fromWireType:function(){},toWireType:function(e,r){}})},_emscripten_get_now_is_monotonic:function(){return true},_emval_as:function(e,r,t){e=or.toValue(e),r=yr(r,"emval::as");var n=[],o=or.toHandle(n);return N[t>>2]=o,r.toWireType(n,e)},_emval_call_void_method:function(e,r,t,n){(e=Ct[e])(r=or.toValue(r),t=xt(t),null,n)},_emval_decref:dt,_emval_get_global:function(e){return 0===e?or.toHandle(Tt()):(e=xt(e),or.toHandle(Tt()[e]))},_emval_get_method_caller:function(e,r){var t=function(e,r){for(var t=new Array(e),n=0;n>2],"parameter "+n);return t}(e,r),n=t[0],o=n.name+"_$"+t.slice(1).map((function(e){return e.name})).join("_")+"$",a=St[o];if(void 0!==a)return a;var i,s,u=new Array(e-1);return i=(r,o,a,i)=>{for(var s=0,c=0;c4&&(Ke[e].refcount+=1)},_emval_instanceof:function(e,r){return(e=or.toValue(e))instanceof(r=or.toValue(r))},_emval_new_cstring:function(e){return or.toHandle(xt(e))},_emval_run_destructors:function(e){Lr(or.toValue(e)),dt(e)},_emval_set_property:function(e,r,t){e=or.toValue(e),r=or.toValue(r),t=or.toValue(t),e[r]=t},_emval_take_value:function(e,r){var t=(e=yr(e,"_emval_take_value")).readValueFromPointer(r);return or.toHandle(t)},_emval_typeof:function(e){return e=or.toValue(e),or.toHandle(typeof e)},_gmtime_js:function(e,r){var t=new Date(1e3*Pt(e));I[r>>2]=t.getUTCSeconds(),I[r+4>>2]=t.getUTCMinutes(),I[r+8>>2]=t.getUTCHours(),I[r+12>>2]=t.getUTCDate(),I[r+16>>2]=t.getUTCMonth(),I[r+20>>2]=t.getUTCFullYear()-1900,I[r+24>>2]=t.getUTCDay();var n=Date.UTC(t.getUTCFullYear(),0,1,0,0,0,0),o=(t.getTime()-n)/864e5|0;I[r+28>>2]=o},_localtime_js:function(e,r){var t=new Date(1e3*Pt(e));I[r>>2]=t.getSeconds(),I[r+4>>2]=t.getMinutes(),I[r+8>>2]=t.getHours(),I[r+12>>2]=t.getDate(),I[r+16>>2]=t.getMonth(),I[r+20>>2]=t.getFullYear()-1900,I[r+24>>2]=t.getDay();var n=0|At(t);I[r+28>>2]=n,I[r+36>>2]=-60*t.getTimezoneOffset();var o=new Date(t.getFullYear(),0,1),a=new Date(t.getFullYear(),6,1).getTimezoneOffset(),i=o.getTimezoneOffset(),s=0|(a!=i&&t.getTimezoneOffset()==Math.min(i,a));I[r+32>>2]=s},_mktime_js:function(e){var r=new Date(I[e+20>>2]+1900,I[e+16>>2],I[e+12>>2],I[e+8>>2],I[e+4>>2],I[e>>2],0),t=I[e+32>>2],n=r.getTimezoneOffset(),o=new Date(r.getFullYear(),0,1),a=new Date(r.getFullYear(),6,1).getTimezoneOffset(),i=o.getTimezoneOffset(),s=Math.min(i,a);if(t<0)I[e+32>>2]=Number(a!=i&&s==n);else if(t>0!=(s==n)){var u=Math.max(i,a),c=t>0?s:u;r.setTime(r.getTime()+6e4*(c-n))}I[e+24>>2]=r.getDay();var l=0|At(r);return I[e+28>>2]=l,I[e>>2]=r.getSeconds(),I[e+4>>2]=r.getMinutes(),I[e+8>>2]=r.getHours(),I[e+12>>2]=r.getDate(),I[e+16>>2]=r.getMonth(),I[e+20>>2]=r.getYear(),r.getTime()/1e3|0},_mmap_js:function(e,r,t,n,o,a,i){try{var s=Re.getStreamFromFD(n),u=Oe.mmap(s,e,o,r,t),c=u.ptr;return I[a>>2]=u.allocated,N[i>>2]=c,0}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},_munmap_js:function(e,r,t,n,o,a){try{var i=Re.getStreamFromFD(o);2&t&&Re.doMsync(e,i,r,n,a),Oe.munmap(i)}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},_tzset_js:function(e,r,t){var n=(new Date).getFullYear(),o=new Date(n,0,1),a=new Date(n,6,1),i=o.getTimezoneOffset(),s=a.getTimezoneOffset(),u=Math.max(i,s);function c(e){var r=e.toTimeString().match(/\(([A-Za-z ]+)\)$/);return r?r[1]:"GMT"}N[e>>2]=60*u,I[r>>2]=Number(i!=s);var l=c(o),d=c(a),f=Dt(l),m=Dt(d);s>2]=f,N[t+4>>2]=m):(N[t>>2]=m,N[t+4>>2]=f)},abort:function(){de("native code called abort()")},emscripten_asm_const_int:function(e,r,t){return Mt(e,r,t)},emscripten_date_now:function(){return Date.now()},emscripten_get_heap_max:function(){return 2147483648},emscripten_get_now:_e,emscripten_memcpy_big:function(e,r,t){M.copyWithin(e,r,r+t)},emscripten_pc_get_function:function(e){de("Cannot use emscripten_pc_get_function without -sUSE_OFFSET_CONVERTER")},emscripten_resize_heap:function(e){var r=M.length;A((e>>>=0)>r);var t,n,o=2147483648;if(e>o)return E("Cannot enlarge memory, asked to go up to "+e+" bytes, but the limit is "+o+" bytes!"),!1;for(var a=1;a<=4;a*=2){var i=r*(1+.2/a);i=Math.min(i,e+100663296);var s=Math.min(o,(t=Math.max(e,i))+((n=65536)-t%n)%n);if(Ot(s))return!0}return E("Failed to grow the heap from "+r+" bytes to "+s+" bytes, not enough memory!"),!1},emscripten_stack_snapshot:function(){var e=jt().split("\n");return"Error"==e[0]&&e.shift(),Nt(e),It.last_addr=Rt(e[3]),It.last_stack=e,It.last_addr},emscripten_stack_unwind_buffer:function(e,r,t){var n;It.last_addr==e?n=It.last_stack:("Error"==(n=jt().split("\n"))[0]&&n.shift(),Nt(n));for(var o=3;n[o]&&Rt(n[o])!=e;)++o;for(var a=0;a>2]=Rt(n[a+o]);return a},emscripten_webgl_create_context:Wt,emscripten_webgl_destroy_context:function(e){Ut.currentContext==e&&(Ut.currentContext=0),Ut.deleteContext(e)},emscripten_webgl_get_context_attributes:function(e,r){if(!r)return-5;if(!(e=Ut.contexts[e]))return-3;var t=e.GLctx;if(!t)return-3;t=t.getContextAttributes(),I[r>>2]=t.alpha,I[r+4>>2]=t.depth,I[r+8>>2]=t.stencil,I[r+12>>2]=t.antialias,I[r+16>>2]=t.premultipliedAlpha,I[r+20>>2]=t.preserveDrawingBuffer;var n=t.powerPreference&&$t.indexOf(t.powerPreference);return I[r+24>>2]=n,I[r+28>>2]=t.failIfMajorPerformanceCaveat,I[r+32>>2]=e.version,I[r+36>>2]=0,I[r+40>>2]=e.attributes.enableExtensionsByDefault,0},emscripten_webgl_get_current_context:Ht,emscripten_webgl_init_context_attributes:function(e){A(e);for(var r=e>>2,t=0;t<14;++t)I[r+t]=0;I[r+0]=I[r+1]=I[r+3]=I[r+4]=I[r+8]=I[r+10]=1},emscripten_webgl_make_context_current:function(e){return Ut.makeContextCurrent(e)?0:-5},emscripten_webgpu_export_bind_group_layout:function(e){return Yt.add(qt.mgrBindGroupLayout.get(e))},emscripten_webgpu_export_device:function(e){return Yt.add(qt.mgrDevice.get(e))},emscripten_webgpu_export_sampler:function(e){return Yt.add(qt.mgrSampler.get(e))},emscripten_webgpu_export_texture:function(e){return Yt.add(qt.mgrTexture.get(e))},emscripten_webgpu_get_device:function(){if(A(o.preinitializedWebGPUDevice),void 0===qt.preinitializedDeviceId){var e=o.preinitializedWebGPUDevice,r={queueId:qt.mgrQueue.create(e.queue)};qt.preinitializedDeviceId=qt.mgrDevice.create(e,r)}return qt.mgrDevice.reference(qt.preinitializedDeviceId),qt.preinitializedDeviceId},emscripten_webgpu_import_bind_group:function(e){return qt.mgrBindGroup.create(Yt.get(e))},emscripten_webgpu_import_texture:function(e){return qt.mgrTexture.create(Yt.get(e))},emscripten_webgpu_release_js_handle:function(e){Yt.remove(e)},environ_get:function(e,r){var t=0;return Qt().forEach((function(n,o){var a=r+t;N[e+4*o>>2]=a,function(e,r,t){for(var n=0;n>0]=e.charCodeAt(n);t||(B[r>>0]=0)}(n,a),t+=n.length+1})),0},environ_sizes_get:function(e,r){var t=Qt();N[e>>2]=t.length;var n=0;return t.forEach((function(e){n+=e.length+1})),N[r>>2]=n,0},exit:Ne,fd_close:function(e){try{var r=Re.getStreamFromFD(e);return Oe.close(r),0}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return e.errno}},fd_read:function(e,r,t,n){try{var o=function(e,r,t,n){for(var o=0,a=0;a>2],s=N[r+4>>2];r+=8;var u=Oe.read(e,B,i,s,n);if(u<0)return-1;if(o+=u,u>2]=o,0}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return e.errno}},fd_seek:function(e,r,t,n,o){try{var a=(u=t,A((s=r)==s>>>0||s==(0|s)),A(u===(0|u)),u+2097152>>>0<4194305-!!s?(s>>>0)+4294967296*u:NaN);if(isNaN(a))return 61;var i=Re.getStreamFromFD(e);return Oe.llseek(i,a,n),ge=[i.position>>>0,(pe=i.position,+Math.abs(pe)>=1?pe>0?(0|Math.min(+Math.floor(pe/4294967296),4294967295))>>>0:~~+Math.ceil((pe-+(~~pe>>>0))/4294967296)>>>0:0)],I[o>>2]=ge[0],I[o+4>>2]=ge[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return e.errno}var s,u},fd_write:function(e,r,t,n){try{var o=function(e,r,t,n){for(var o=0,a=0;a>2],s=N[r+4>>2];r+=8;var u=Oe.write(e,B,i,s,n);if(u<0)return-1;o+=u}return o}(Re.getStreamFromFD(e),r,t);return N[n>>2]=o,0}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return e.errno}},getentropy:function e(r,t){e.randomDevice||(e.randomDevice=Se());for(var n=0;n>0]=e.randomDevice();return 0},glActiveTexture:function(e){fn.activeTexture(e)},glAttachShader:function(e,r){fn.attachShader(Ut.programs[e],Ut.shaders[r])},glBindAttribLocation:function(e,r,t){fn.bindAttribLocation(Ut.programs[e],r,z(t))},glBindBuffer:function(e,r){34962==e?fn.currentArrayBufferBinding=r:34963==e&&(fn.currentElementArrayBufferBinding=r),35051==e?fn.currentPixelPackBufferBinding=r:35052==e&&(fn.currentPixelUnpackBufferBinding=r),fn.bindBuffer(e,Ut.buffers[r])},glBindBufferBase:function(e,r,t){fn.bindBufferBase(e,r,Ut.buffers[t])},glBindFramebuffer:function(e,r){fn.bindFramebuffer(e,r?Ut.framebuffers[r]:Ut.currentContext.defaultFbo)},glBindTexture:function(e,r){fn.bindTexture(e,Ut.textures[r])},glBindVertexArray:function(e){fn.bindVertexArray(Ut.vaos[e]);var r=fn.getParameter(34965);fn.currentElementArrayBufferBinding=r?0|r.name:0},glBufferData:function(e,r,t,n){Ut.currentContext.version>=2?t&&r?fn.bufferData(e,M,n,t,r):fn.bufferData(e,r,n):fn.bufferData(e,t?M.subarray(t,t+r):r,n)},glClientWaitSync:function(e,r,t,n){return fn.clientWaitSync(Ut.syncs[e],r,(o=t,A((a=n)===(0|a)),(o>>>0)+4294967296*a));var o,a},glCompileShader:function(e){fn.compileShader(Ut.shaders[e])},glCreateProgram:function(){var e=Ut.getNewId(Ut.programs),r=fn.createProgram();return r.name=e,r.maxUniformLength=r.maxAttributeLength=r.maxUniformBlockNameLength=0,r.uniformIdCounter=1,Ut.programs[e]=r,e},glCreateShader:function(e){var r=Ut.getNewId(Ut.shaders);return Ut.shaders[r]=fn.createShader(e),r},glDeleteBuffers:function(e,r){for(var t=0;t>2],o=Ut.buffers[n];o&&(fn.deleteBuffer(o),o.name=0,Ut.buffers[n]=null,n==fn.currentArrayBufferBinding&&(fn.currentArrayBufferBinding=0),n==fn.currentElementArrayBufferBinding&&(fn.currentElementArrayBufferBinding=0),n==fn.currentPixelPackBufferBinding&&(fn.currentPixelPackBufferBinding=0),n==fn.currentPixelUnpackBufferBinding&&(fn.currentPixelUnpackBufferBinding=0))}},glDeleteFramebuffers:function(e,r){for(var t=0;t>2],o=Ut.framebuffers[n];o&&(fn.deleteFramebuffer(o),o.name=0,Ut.framebuffers[n]=null)}},glDeleteProgram:function(e){if(e){var r=Ut.programs[e];r?(fn.deleteProgram(r),r.name=0,Ut.programs[e]=null):Ut.recordError(1281)}},glDeleteShader:function(e){if(e){var r=Ut.shaders[e];r?(fn.deleteShader(r),Ut.shaders[e]=null):Ut.recordError(1281)}},glDeleteSync:function(e){if(e){var r=Ut.syncs[e];r?(fn.deleteSync(r),r.name=0,Ut.syncs[e]=null):Ut.recordError(1281)}},glDeleteTextures:function(e,r){for(var t=0;t>2],o=Ut.textures[n];o&&(fn.deleteTexture(o),o.name=0,Ut.textures[n]=null)}},glDeleteVertexArrays:function(e,r){for(var t=0;t>2];fn.deleteVertexArray(Ut.vaos[n]),Ut.vaos[n]=null}},glDisable:function(e){fn.disable(e)},glDisableVertexAttribArray:function(e){Ut.currentContext.clientBuffers[e].enabled=!1,fn.disableVertexAttribArray(e)},glDrawArrays:function(e,r,t){Ut.preDrawHandleClientVertexAttribBindings(r+t),fn.drawArrays(e,r,t),Ut.postDrawHandleClientVertexAttribBindings()},glDrawBuffers:function(e,r){for(var t=Kt[e],n=0;n>2];fn.drawBuffers(t)},glEnableVertexAttribArray:function(e){Ut.currentContext.clientBuffers[e].enabled=!0,fn.enableVertexAttribArray(e)},glFenceSync:function(e,r){var t=fn.fenceSync(e,r);if(t){var n=Ut.getNewId(Ut.syncs);return t.name=n,Ut.syncs[n]=t,n}return 0},glFinish:function(){fn.finish()},glFlush:function(){fn.flush()},glFramebufferTexture2D:function(e,r,t,n,o){fn.framebufferTexture2D(e,r,t,Ut.textures[n],o)},glFramebufferTextureLayer:function(e,r,t,n,o){fn.framebufferTextureLayer(e,r,Ut.textures[t],n,o)},glGenBuffers:function(e,r){Jt(e,r,"createBuffer",Ut.buffers)},glGenFramebuffers:function(e,r){Jt(e,r,"createFramebuffer",Ut.framebuffers)},glGenTextures:function(e,r){Jt(e,r,"createTexture",Ut.textures)},glGenVertexArrays:function(e,r){Jt(e,r,"createVertexArray",Ut.vaos)},glGetAttribLocation:function(e,r){return fn.getAttribLocation(Ut.programs[e],z(r))},glGetError:function(){var e=fn.getError()||Ut.lastError;return Ut.lastError=0,e},glGetIntegerv:function(e,r){!function(e,r,t){if(r){var n=void 0;switch(e){case 36346:n=1;break;case 36344:return void(0!=t&&1!=t&&Ut.recordError(1280));case 34814:case 36345:n=0;break;case 34466:var o=fn.getParameter(34467);n=o?o.length:0;break;case 33309:if(Ut.currentContext.version<2)return void Ut.recordError(1282);n=2*(fn.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(Ut.currentContext.version<2)return void Ut.recordError(1280);n=33307==e?3:0}if(void 0===n){var a=fn.getParameter(e);switch(typeof a){case"number":n=a;break;case"boolean":n=a?1:0;break;case"string":return void Ut.recordError(1280);case"object":if(null===a)switch(e){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:n=0;break;default:return void Ut.recordError(1280)}else{if(a instanceof Float32Array||a instanceof Uint32Array||a instanceof Int32Array||a instanceof Array){for(var i=0;i>2]=a[i];break;case 2:j[r+4*i>>2]=a[i];break;case 4:B[r+i>>0]=a[i]?1:0}return}try{n=0|a.name}catch(r){return Ut.recordError(1280),void E("GL_INVALID_ENUM in glGet"+t+"v: Unknown object returned from WebGL getParameter("+e+")! (error: "+r+")")}}break;default:return Ut.recordError(1280),void E("GL_INVALID_ENUM in glGet"+t+"v: Native code calling glGet"+t+"v("+e+") and it returns "+a+" of type "+typeof a+"!")}}switch(t){case 1:Zt(r,n);break;case 0:I[r>>2]=n;break;case 2:j[r>>2]=n;break;case 4:B[r>>0]=n?1:0}}else Ut.recordError(1281)}(e,r,0)},glGetProgramiv:function(e,r,t){if(t)if(e>=Ut.counter)Ut.recordError(1281);else if(e=Ut.programs[e],35716==r){var n=fn.getProgramInfoLog(e);null===n&&(n="(unknown error)"),I[t>>2]=n.length+1}else if(35719==r){if(!e.maxUniformLength)for(var o=0;o>2]=e.maxUniformLength}else if(35722==r){if(!e.maxAttributeLength)for(o=0;o>2]=e.maxAttributeLength}else if(35381==r){if(!e.maxUniformBlockNameLength)for(o=0;o>2]=e.maxUniformBlockNameLength}else I[t>>2]=fn.getProgramParameter(e,r);else Ut.recordError(1281)},glGetShaderInfoLog:function(e,r,t,n){var o=fn.getShaderInfoLog(Ut.shaders[e]);null===o&&(o="(unknown error)");var a=r>0&&n?W(o,n,r):0;t&&(I[t>>2]=a)},glGetShaderiv:function(e,r,t){if(t)if(35716==r){var n=fn.getShaderInfoLog(Ut.shaders[e]);null===n&&(n="(unknown error)");var o=n?n.length+1:0;I[t>>2]=o}else if(35720==r){var a=fn.getShaderSource(Ut.shaders[e]),i=a?a.length+1:0;I[t>>2]=i}else I[t>>2]=fn.getShaderParameter(Ut.shaders[e],r);else Ut.recordError(1281)},glGetString:function(e){var r=Ut.stringCache[e];if(!r){switch(e){case 7939:var t=fn.getSupportedExtensions()||[];r=en((t=t.concat(t.map((function(e){return"GL_"+e})))).join(" "));break;case 7936:case 7937:case 37445:case 37446:var n=fn.getParameter(e);n||Ut.recordError(1280),r=n&&en(n);break;case 7938:var o=fn.getParameter(7938);r=en(o=Ut.currentContext.version>=2?"OpenGL ES 3.0 ("+o+")":"OpenGL ES 2.0 ("+o+")");break;case 35724:var a=fn.getParameter(35724),i=a.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==i&&(3==i[1].length&&(i[1]=i[1]+"0"),a="OpenGL ES GLSL ES "+i[1]+" ("+a+")"),r=en(a);break;default:Ut.recordError(1280)}Ut.stringCache[e]=r}return r},glGetUniformBlockIndex:function(e,r){return fn.getUniformBlockIndex(Ut.programs[e],z(r))},glGetUniformLocation:function(e,r){if(r=z(r),e=Ut.programs[e]){!function(e){var r,t,n=e.uniformLocsById,o=e.uniformSizeAndIdsByName;if(!n)for(e.uniformLocsById=n={},e.uniformArrayNamesById={},r=0;r0?i.slice(0,u):i,l=e.uniformIdCounter;for(e.uniformIdCounter+=s,o[c]=[s,l],t=0;t0&&(s=r.slice(a+1),n=parseInt(s)>>>0,o=r.slice(0,a));var i=e.uniformSizeAndIdsByName[o];if(i&&n=2)if(fn.currentPixelPackBufferBinding)fn.readPixels(e,r,t,n,o,a,i);else{var s=tn(a);fn.readPixels(e,r,t,n,o,a,s,i>>nn(s))}else{var u=on(a,o,t,n,i);u?fn.readPixels(e,r,t,n,o,a,u):Ut.recordError(1280)}},glShaderSource:function(e,r,t,n){var o=Ut.getSource(e,r,t,n);fn.shaderSource(Ut.shaders[e],o)},glTexImage2D:function(e,r,t,n,o,a,i,s,u){if(Ut.currentContext.version>=2)if(fn.currentPixelUnpackBufferBinding)fn.texImage2D(e,r,t,n,o,a,i,s,u);else if(u){var c=tn(s);fn.texImage2D(e,r,t,n,o,a,i,s,c,u>>nn(c))}else fn.texImage2D(e,r,t,n,o,a,i,s,null);else fn.texImage2D(e,r,t,n,o,a,i,s,u?on(s,i,n,o,u):null)},glTexParameterfv:function(e,r,t){var n=j[t>>2];fn.texParameterf(e,r,n)},glTexParameteri:function(e,r,t){fn.texParameteri(e,r,t)},glTexStorage2D:function(e,r,t,n,o){fn.texStorage2D(e,r,t,n,o)},glTexStorage3D:function(e,r,t,n,o,a){fn.texStorage3D(e,r,t,n,o,a)},glTexSubImage2D:function(e,r,t,n,o,a,i,s,u){if(Ut.currentContext.version>=2)if(fn.currentPixelUnpackBufferBinding)fn.texSubImage2D(e,r,t,n,o,a,i,s,u);else if(u){var c=tn(s);fn.texSubImage2D(e,r,t,n,o,a,i,s,c,u>>nn(c))}else fn.texSubImage2D(e,r,t,n,o,a,i,s,null);else{var l=null;u&&(l=on(s,i,o,a,u)),fn.texSubImage2D(e,r,t,n,o,a,i,s,l)}},glTexSubImage3D:function(e,r,t,n,o,a,i,s,u,c,l){if(fn.currentPixelUnpackBufferBinding)fn.texSubImage3D(e,r,t,n,o,a,i,s,u,c,l);else if(l){var d=tn(c);fn.texSubImage3D(e,r,t,n,o,a,i,s,u,c,d,l>>nn(d))}else fn.texSubImage3D(e,r,t,n,o,a,i,s,u,c,null)},glUniform1f:function(e,r){fn.uniform1f(an(e),r)},glUniform1i:function(e,r){fn.uniform1i(an(e),r)},glUniform2fv:function(e,r,t){if(Ut.currentContext.version>=2)r&&fn.uniform2fv(an(e),j,t>>2,2*r);else{if(r<=144)for(var n=sn[2*r-1],o=0;o<2*r;o+=2)n[o]=j[t+4*o>>2],n[o+1]=j[t+(4*o+4)>>2];else n=j.subarray(t>>2,t+8*r>>2);fn.uniform2fv(an(e),n)}},glUniform4fv:function(e,r,t){if(Ut.currentContext.version>=2)r&&fn.uniform4fv(an(e),j,t>>2,4*r);else{if(r<=72){var n=sn[4*r-1],o=j;t>>=2;for(var a=0;a<4*r;a+=4){var i=t+a;n[a]=o[i],n[a+1]=o[i+1],n[a+2]=o[i+2],n[a+3]=o[i+3]}}else n=j.subarray(t>>2,t+16*r>>2);fn.uniform4fv(an(e),n)}},glUniform4iv:function(e,r,t){if(Ut.currentContext.version>=2)r&&fn.uniform4iv(an(e),I,t>>2,4*r);else{if(r<=72)for(var n=un[4*r-1],o=0;o<4*r;o+=4)n[o]=I[t+4*o>>2],n[o+1]=I[t+(4*o+4)>>2],n[o+2]=I[t+(4*o+8)>>2],n[o+3]=I[t+(4*o+12)>>2];else n=I.subarray(t>>2,t+16*r>>2);fn.uniform4iv(an(e),n)}},glUniformBlockBinding:function(e,r,t){e=Ut.programs[e],fn.uniformBlockBinding(e,r,t)},glUniformMatrix4fv:function(e,r,t,n){if(Ut.currentContext.version>=2)r&&fn.uniformMatrix4fv(an(e),!!t,j,n>>2,16*r);else{if(r<=18){var o=sn[16*r-1],a=j;n>>=2;for(var i=0;i<16*r;i+=16){var s=n+i;o[i]=a[s],o[i+1]=a[s+1],o[i+2]=a[s+2],o[i+3]=a[s+3],o[i+4]=a[s+4],o[i+5]=a[s+5],o[i+6]=a[s+6],o[i+7]=a[s+7],o[i+8]=a[s+8],o[i+9]=a[s+9],o[i+10]=a[s+10],o[i+11]=a[s+11],o[i+12]=a[s+12],o[i+13]=a[s+13],o[i+14]=a[s+14],o[i+15]=a[s+15]}}else o=j.subarray(n>>2,n+64*r>>2);fn.uniformMatrix4fv(an(e),!!t,o)}},glUseProgram:function(e){e=Ut.programs[e],fn.useProgram(e),fn.currentProgram=e},glVertexAttribPointer:function(e,r,t,n,o,a){var i=Ut.currentContext.clientBuffers[e];if(!fn.currentArrayBufferBinding)return i.size=r,i.type=t,i.normalized=n,i.stride=o,i.ptr=a,i.clientside=!0,void(i.vertexAttribPointerAdaptor=function(e,r,t,n,o,a){this.vertexAttribPointer(e,r,t,n,o,a)});i.clientside=!1,fn.vertexAttribPointer(e,r,t,!!n,o,a)},glViewport:function(e,r,t,n){fn.viewport(e,r,t,n)},mediapipe_create_utility_canvas2d:function(){const e=document.createElement("canvas");return e.style.display="none",e.id="canvas_2d",document.body.appendChild(e),or.toHandle(e)},mediapipe_find_canvas_event_target:function(e){return or.toHandle(Gt(e))},mediapipe_import_external_texture:function(e,r){const t=qt.mgrDevice.get(e),n=or.toValue(r),o=t.importExternalTexture({source:n});return or.toHandle(o)},mediapipe_webgl_tex_image_drawable:function(e){const r=or.toValue(e);fn.texImage2D(fn.TEXTURE_2D,0,fn.RGBA,fn.RGBA,fn.UNSIGNED_BYTE,r)},proc_exit:Ie,strftime:dn,strftime_l:function(e,r,t,n,o){return dn(e,r,t,n)},wgpuBindGroupLayoutRelease:function(e){qt.mgrBindGroupLayout.release(e)},wgpuBindGroupRelease:function(e){qt.mgrBindGroup.release(e)},wgpuBufferGetMappedRange:function(e,r,t){var n,o=qt.mgrBuffer.objects[e];if(A(void 0!==o),0===t&&Ve("getMappedRange size=0 no longer means WGPU_WHOLE_MAP_SIZE"),4294967295===(t>>>=0)&&(t=void 0),2!==o.mapMode)return de("GetMappedRange called, but buffer not mapped for writing"),0;try{n=o.object.getMappedRange(r,t)}catch(e){return E("wgpuBufferGetMappedRange("+r+", "+t+") failed: "+e),0}var a=En(n.byteLength);return M.fill(0,a,n.byteLength),o.onUnmap.push((function(){new Uint8Array(n).set(M.subarray(a,a+n.byteLength)),xn(a)})),a},wgpuBufferReference:function(e){qt.mgrBuffer.reference(e)},wgpuBufferRelease:function(e){qt.mgrBuffer.release(e)},wgpuBufferUnmap:function(e){var r=qt.mgrBuffer.objects[e];if(A(void 0!==r),r.onUnmap){for(var t=0;t>2]),queryIndex:N[e+4>>2],location:qt.ComputePassTimestampLocation[N[e+8>>2]]}}if(r){A(r),A(0===N[r>>2]),t={};var o=N[r+4>>2];o&&(t.label=z(o));var a=N[r+8>>2];a&&(t.timestampWrites=function(e,r){for(var t=[],o=0;o>2]))}var i=qt.mgrCommandEncoder.get(e);return qt.mgrComputePassEncoder.create(i.beginComputePass(t))},wgpuCommandEncoderBeginRenderPass:function(e,r){function t(e){var r=N[e>>2];if(0!==r){var t=N[e+8>>2];A(0!==t);var n=N[e+12>>2];A(0!==n);var o=qt.makeColor(e+16);return{view:qt.mgrTextureView.get(r),resolveTarget:qt.mgrTextureView.get(N[e+4>>2]),clearValue:o,loadOp:qt.LoadOp[t],storeOp:qt.StoreOp[n]}}}function n(e,r){for(var n=[],o=0;o>2]),depthClearValue:j[e+12>>2],depthLoadOp:qt.LoadOp[N[e+4>>2]],depthStoreOp:qt.StoreOp[N[e+8>>2]],depthReadOnly:0!==B[e+16>>0],stencilClearValue:N[e+28>>2],stencilLoadOp:qt.LoadOp[N[e+20>>2]],stencilStoreOp:qt.StoreOp[N[e+24>>2]],stencilReadOnly:0!==B[e+32>>0]}}function a(e){return{querySet:qt.mgrQuerySet.get(N[e>>2]),queryIndex:N[e+4>>2],location:qt.RenderPassTimestampLocation[N[e+8>>2]]}}A(r);var i=function(e){A(e);var r=N[e>>2],t=void 0;if(0!==r){A(15===N[r+4>>2]),A(0===N[r>>2]);var i=r;A(i),A(0===N[i>>2]),t=4294967296*N[i+4+8>>2]+N[i+8>>2]}var s={label:void 0,colorAttachments:n(N[e+8>>2],N[e+12>>2]),depthStencilAttachment:o(N[e+16>>2]),occlusionQuerySet:qt.mgrQuerySet.get(N[e+20>>2]),maxDrawCount:t},u=N[e+4>>2];u&&(s.label=z(u));var c=N[e+24>>2];return c&&(s.timestampWrites=function(e,r){for(var t=[],n=0;n>2])),s}(r),s=qt.mgrCommandEncoder.get(e);return qt.mgrRenderPassEncoder.create(s.beginRenderPass(i))},wgpuCommandEncoderCopyBufferToTexture:function(e,r,t,n){var o=qt.mgrCommandEncoder.get(e),a=qt.makeExtent3D(n);o.copyBufferToTexture(qt.makeImageCopyBuffer(r),qt.makeImageCopyTexture(t),a)},wgpuCommandEncoderCopyTextureToTexture:function(e,r,t,n){var o=qt.mgrCommandEncoder.get(e),a=qt.makeExtent3D(n);o.copyTextureToTexture(qt.makeImageCopyTexture(r),qt.makeImageCopyTexture(t),a)},wgpuCommandEncoderFinish:function(e){var r=qt.mgrCommandEncoder.get(e);return qt.mgrCommandBuffer.create(r.finish())},wgpuCommandEncoderRelease:function(e){qt.mgrCommandEncoder.release(e)},wgpuComputePassEncoderDispatchWorkgroups:function(e,r,t,n){var o=qt.mgrComputePassEncoder.get(e);o.dispatchWorkgroups?o.dispatchWorkgroups(r,t,n):o.dispatch(r,t,n)},wgpuComputePassEncoderEnd:function(e){qt.mgrComputePassEncoder.get(e).end()},wgpuComputePassEncoderRelease:function(e){qt.mgrComputePassEncoder.release(e)},wgpuComputePassEncoderSetBindGroup:function(e,r,t,n,o){var a=qt.mgrComputePassEncoder.get(e),i=qt.mgrBindGroup.get(t);if(0==n)a.setBindGroup(r,i);else{for(var s=[],u=0;u>2]);a.setBindGroup(r,i,s)}},wgpuComputePassEncoderSetPipeline:function(e,r){var t=qt.mgrComputePassEncoder.get(e),n=qt.mgrComputePipeline.get(r);t.setPipeline(n)},wgpuComputePipelineGetBindGroupLayout:function(e,r){var t=qt.mgrComputePipeline.get(e);return qt.mgrBindGroupLayout.create(t.getBindGroupLayout(r))},wgpuComputePipelineRelease:function(e){qt.mgrComputePipeline.release(e)},wgpuDeviceCreateBindGroup:function(e,r){function t(e){A(e);var r=N[e+8>>2],t=N[e+32>>2],n=N[e+36>>2];A((0!==r)+(0!==t)+(0!==n)===1);var o=N[e+4>>2];if(r){var a=N[e+24>>2],i=N[e+28>>2],s=-1===i&&-1===a?void 0:(A(i<2097152),4294967296*i+a);return{binding:o,resource:{buffer:qt.mgrBuffer.get(r),offset:4294967296*N[e+4+16>>2]+N[e+16>>2],size:s}}}return t?{binding:o,resource:qt.mgrSampler.get(t)}:{binding:o,resource:qt.mgrTextureView.get(n)}}A(r),A(0===N[r>>2]);var n={label:void 0,layout:qt.mgrBindGroupLayout.get(N[r+8>>2]),entries:function(e,r){for(var n=[],o=0;o>2],N[r+16>>2])},o=N[r+4>>2];o&&(n.label=z(o));var a=qt.mgrDevice.get(e);return qt.mgrBindGroup.create(a.createBindGroup(n))},wgpuDeviceCreateBuffer:function(e,r){A(r),A(0===N[r>>2]);var t=0!==B[r+24>>0],n={label:void 0,usage:N[r+8>>2],size:4294967296*N[r+4+16>>2]+N[r+16>>2],mappedAtCreation:t},o=N[r+4>>2];o&&(n.label=z(o));var a=qt.mgrDevice.get(e),i={},s=qt.mgrBuffer.create(a.createBuffer(n),i);return t&&(i.mapMode=2,i.onUnmap=[]),s},wgpuDeviceCreateCommandEncoder:function(e,r){var t;if(r){A(r),A(0===N[r>>2]),t={label:void 0};var n=N[r+4>>2];n&&(t.label=z(n))}var o=qt.mgrDevice.get(e);return qt.mgrCommandEncoder.create(o.createCommandEncoder(t))},wgpuDeviceCreateComputePipeline:function(e,r){A(r),A(0===N[r>>2]);var t={label:void 0,layout:qt.mgrPipelineLayout.get(N[r+8>>2]),compute:qt.makeProgrammableStageDescriptor(r+12)},n=N[r+4>>2];n&&(t.label=z(n));var o=qt.mgrDevice.get(e);return qt.mgrComputePipeline.create(o.createComputePipeline(t))},wgpuDeviceCreateRenderPipeline:function(e,r){function t(e){if(e)return{operation:qt.BlendOperation[N[e>>2]],srcFactor:qt.BlendFactor[N[e+4>>2]],dstFactor:qt.BlendFactor[N[e+8>>2]]}}function n(e){if(e)return A(e),A(0===N[e>>2]),{alpha:t(e+12),color:t(e+0)}}function o(e){A(e),A(0===N[e>>2]);var r=N[e+4>>2];return 0===r?void 0:{format:qt.TextureFormat[r],blend:n(N[e+8>>2]),writeMask:N[e+12>>2]}}function a(e,r){for(var t=[],n=0;n>2]],failOp:qt.StencilOperation[N[e+4>>2]],depthFailOp:qt.StencilOperation[N[e+8>>2]],passOp:qt.StencilOperation[N[e+12>>2]]}}function s(e,r){for(var t,n=[],o=0;o>2]],offset:4294967296*N[t+4+8>>2]+N[t+8>>2],shaderLocation:N[t+16>>2]}));return n}function u(e){if(e){var r=N[e+8>>2];return 2===r?null:{arrayStride:4294967296*N[e+4>>2]+N[e>>2],stepMode:qt.VertexStepMode[r],attributes:s(N[e+12>>2],N[e+16>>2])}}}function c(e,r){if(e){for(var t=[],n=0;n>2]);var l={label:void 0,layout:qt.mgrPipelineLayout.get(N[r+8>>2]),vertex:function(e){if(e)return A(e),A(0===N[e>>2]),{module:qt.mgrShaderModule.get(N[e+4>>2]),entryPoint:z(N[e+8>>2]),constants:qt.makePipelineConstants(N[e+12>>2],N[e+16>>2]),buffers:c(N[e+20>>2],N[e+24>>2])}}(r+12),primitive:function(e){if(e)return A(e),A(0===N[e>>2]),{topology:qt.PrimitiveTopology[N[e+4>>2]],stripIndexFormat:qt.IndexFormat[N[e+8>>2]],frontFace:qt.FrontFace[N[e+12>>2]],cullMode:qt.CullMode[N[e+16>>2]]}}(r+40),depthStencil:function(e){if(e)return A(e),{format:qt.TextureFormat[N[e+4>>2]],depthWriteEnabled:0!==B[e+8>>0],depthCompare:qt.CompareFunction[N[e+12>>2]],stencilFront:i(e+16),stencilBack:i(e+32),stencilReadMask:N[e+48>>2],stencilWriteMask:N[e+52>>2],depthBias:N[e+56>>2],depthBiasSlopeScale:j[e+60>>2],depthBiasClamp:j[e+64>>2]}}(N[r+60>>2]),multisample:function(e){if(e)return A(e),A(0===N[e>>2]),{count:N[e+4>>2],mask:N[e+8>>2],alphaToCoverageEnabled:0!==B[e+12>>0]}}(r+64),fragment:function(e){if(e)return A(e),A(0===N[e>>2]),{module:qt.mgrShaderModule.get(N[e+4>>2]),entryPoint:z(N[e+8>>2]),constants:qt.makePipelineConstants(N[e+12>>2],N[e+16>>2]),targets:a(N[e+20>>2],N[e+24>>2])}}(N[r+80>>2])},d=N[r+4>>2];d&&(l.label=z(d));var f=qt.mgrDevice.get(e);return qt.mgrRenderPipeline.create(f.createRenderPipeline(l))},wgpuDeviceCreateSampler:function(e,r){A(r),A(0===N[r>>2]);var t={label:void 0,addressModeU:qt.AddressMode[N[r+8>>2]],addressModeV:qt.AddressMode[N[r+12>>2]],addressModeW:qt.AddressMode[N[r+16>>2]],magFilter:qt.FilterMode[N[r+20>>2]],minFilter:qt.FilterMode[N[r+24>>2]],mipmapFilter:qt.FilterMode[N[r+28>>2]],lodMinClamp:j[r+32>>2],lodMaxClamp:j[r+36>>2],compare:qt.CompareFunction[N[r+40>>2]]},n=N[r+4>>2];n&&(t.label=z(n));var o=qt.mgrDevice.get(e);return qt.mgrSampler.create(o.createSampler(t))},wgpuDeviceCreateShaderModule:function(e,r){A(r);var t=N[r>>2];A(0!==t);var n=N[t+4>>2],o={label:void 0,code:""},a=N[r+4>>2];switch(a&&(o.label=z(a)),n){case 5:var i=N[t+8>>2],s=N[t+12>>2];o.code=N.subarray(s>>2,(s>>2)+i);break;case 6:var u=N[t+8>>2];u&&(o.code=z(u));break;default:de("unrecognized ShaderModule sType")}var c=qt.mgrDevice.get(e);return qt.mgrShaderModule.create(c.createShaderModule(o))},wgpuDeviceCreateTexture:function(e,r){A(r),A(0===N[r>>2]);var t={label:void 0,size:qt.makeExtent3D(r+16),mipLevelCount:N[r+32>>2],sampleCount:N[r+36>>2],dimension:qt.TextureDimension[N[r+12>>2]],format:qt.TextureFormat[N[r+28>>2]],usage:N[r+8>>2]},n=N[r+4>>2];n&&(t.label=z(n));var o=N[r+40>>2];if(o){var a=N[r+44>>2];t.viewFormats=Array.from(I.subarray(a>>2,(a>>2)+o),(function(e){return qt.TextureFormat[e]}))}var i=qt.mgrDevice.get(e);return qt.mgrTexture.create(i.createTexture(t))},wgpuDeviceGetQueue:function(e){var r=qt.mgrDevice.objects[e].queueId;return A(r,"wgpuDeviceGetQueue: queue was missing or null"),qt.mgrQueue.reference(r),r},wgpuDeviceReference:function(e){qt.mgrDevice.reference(e)},wgpuDeviceRelease:function(e){qt.mgrDevice.release(e)},wgpuPipelineLayoutRelease:function(e){qt.mgrPipelineLayout.release(e)},wgpuQuerySetRelease:function(e){qt.mgrQuerySet.release(e)},wgpuQueueRelease:function(e){qt.mgrQueue.release(e)},wgpuQueueSubmit:function(e,r,t){A(t%4==0);var n=qt.mgrQueue.get(e),o=Array.from(I.subarray(t>>2,(t>>2)+r),(function(e){return qt.mgrCommandBuffer.get(e)}));n.submit(o)},wgpuQueueWriteBuffer:function(e,r,t,n,o,a){var i=qt.mgrQueue.get(e),s=qt.mgrBuffer.get(r),u=(A(n<2097152),4294967296*n+t),c=M.subarray(o,o+a);i.writeBuffer(s,u,c,0,a)},wgpuRenderPassEncoderDraw:function(e,r,t,n,o){qt.mgrRenderPassEncoder.get(e).draw(r,t,n,o)},wgpuRenderPassEncoderEnd:function(e){qt.mgrRenderPassEncoder.get(e).end()},wgpuRenderPassEncoderRelease:function(e){qt.mgrRenderPassEncoder.release(e)},wgpuRenderPassEncoderSetBindGroup:function(e,r,t,n,o){var a=qt.mgrRenderPassEncoder.get(e),i=qt.mgrBindGroup.get(t);if(0==n)a.setBindGroup(r,i);else{for(var s=[],u=0;u>2]);a.setBindGroup(r,i,s)}},wgpuRenderPassEncoderSetPipeline:function(e,r){var t=qt.mgrRenderPassEncoder.get(e),n=qt.mgrRenderPipeline.get(r);t.setPipeline(n)},wgpuRenderPipelineGetBindGroupLayout:function(e,r){var t=qt.mgrRenderPipeline.get(e);return qt.mgrBindGroupLayout.create(t.getBindGroupLayout(r))},wgpuRenderPipelineRelease:function(e){qt.mgrRenderPipeline.release(e)},wgpuSamplerReference:function(e){qt.mgrSampler.reference(e)},wgpuSamplerRelease:function(e){qt.mgrSampler.release(e)},wgpuShaderModuleReference:function(e){qt.mgrShaderModule.reference(e)},wgpuShaderModuleRelease:function(e){qt.mgrShaderModule.release(e)},wgpuTextureCreateView:function(e,r){var t;if(r){A(r),A(0===N[r>>2]);var n=N[r+20>>2],o=N[r+28>>2];t={format:qt.TextureFormat[N[r+8>>2]],dimension:qt.TextureViewDimension[N[r+12>>2]],baseMipLevel:N[r+16>>2],mipLevelCount:4294967295===n?void 0:n,baseArrayLayer:N[r+24>>2],arrayLayerCount:4294967295===o?void 0:o,aspect:qt.TextureAspect[N[r+32>>2]]};var a=N[r+4>>2];a&&(t.label=z(a))}var i=qt.mgrTexture.get(e);return qt.mgrTextureView.create(i.createView(t))},wgpuTextureDestroy:function(e){qt.mgrTexture.get(e).destroy()},wgpuTextureReference:function(e){qt.mgrTexture.reference(e)},wgpuTextureRelease:function(e){qt.mgrTexture.release(e)},wgpuTextureViewReference:function(e){qt.mgrTextureView.reference(e)},wgpuTextureViewRelease:function(e){qt.mgrTextureView.release(e)}},En=(function(){var e={env:_n,wasi_snapshot_preview1:_n};function r(e,r){var t,n=e.exports;o.asm=n,A(P=o.asm.memory,"memory not found in wasm exports"),q(P.buffer),A(X=o.asm.__indirect_function_table,"table not found in wasm exports"),t=o.asm.__wasm_call_ctors,Z.unshift(t),le("wasm-instantiate")}ce("wasm-instantiate");var t=o;function a(e){A(o===t,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),t=null,r(e.instance)}function i(r){return function(){if(!x&&(c||l)){if("function"==typeof fetch&&!ye(fe))return fetch(fe,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+fe+"'";return e.arrayBuffer()})).catch((function(){return we(fe)}));if(p)return new Promise((function(e,r){p(fe,(function(r){e(new Uint8Array(r))}),r)}))}return Promise.resolve().then((function(){return we(fe)}))}().then((function(r){return WebAssembly.instantiate(r,e)})).then((function(e){return e})).then(r,(function(e){E("failed to asynchronously prepare wasm: "+e),ye(fe)&&E("warning: Loading from a file URI ("+fe+") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing"),de(e)}))}if(o.instantiateWasm)try{return o.instantiateWasm(e,r)}catch(e){E("Module.instantiateWasm callback failed with error: "+e),n(e)}(x||"function"!=typeof WebAssembly.instantiateStreaming||he(fe)||ye(fe)||d||"function"!=typeof fetch?i(a):fetch(fe,{credentials:"same-origin"}).then((function(r){return WebAssembly.instantiateStreaming(r,e).then(a,(function(e){return E("wasm streaming compile failed: "+e),E("falling back to ArrayBuffer instantiation"),i(a)}))}))).catch(n)}(),o.___wasm_call_ctors=be("__wasm_call_ctors"),o._malloc=be("malloc")),xn=o._free=be("free"),Cn=o.___errno_location=be("__errno_location"),Tn=o._fflush=be("fflush"),Sn=o.___getTypeName=be("__getTypeName"),Pn=(o.__embind_initialize_bindings=be("_embind_initialize_bindings"),o.___dl_seterr=be("__dl_seterr"),o._emscripten_builtin_memalign=be("emscripten_builtin_memalign")),kn=o._emscripten_stack_init=function(){return(kn=o._emscripten_stack_init=o.asm.emscripten_stack_init).apply(null,arguments)},Fn=(o._emscripten_stack_get_free=function(){return(o._emscripten_stack_get_free=o.asm.emscripten_stack_get_free).apply(null,arguments)},o._emscripten_stack_get_base=function(){return(o._emscripten_stack_get_base=o.asm.emscripten_stack_get_base).apply(null,arguments)},o._emscripten_stack_get_end=function(){return(Fn=o._emscripten_stack_get_end=o.asm.emscripten_stack_get_end).apply(null,arguments)}),Ln=(o.stackSave=be("stackSave"),o.stackRestore=be("stackRestore"),o.stackAlloc=be("stackAlloc"),o._emscripten_stack_get_current=function(){return(Ln=o._emscripten_stack_get_current=o.asm.emscripten_stack_get_current).apply(null,arguments)}),An=o.___cxa_is_pointer_type=be("__cxa_is_pointer_type");o.dynCall_jii=be("dynCall_jii"),o.dynCall_iiiijij=be("dynCall_iiiijij"),o.dynCall_ji=be("dynCall_ji"),o.dynCall_viji=be("dynCall_viji"),o.dynCall_jjj=be("dynCall_jjj"),o.dynCall_jiii=be("dynCall_jiii"),o.dynCall_iiiijj=be("dynCall_iiiijj"),o.dynCall_viijj=be("dynCall_viijj"),o.dynCall_viiijjj=be("dynCall_viiijjj"),o.dynCall_vij=be("dynCall_vij"),o.dynCall_viijii=be("dynCall_viijii"),o.dynCall_vijjj=be("dynCall_vijjj"),o.dynCall_vj=be("dynCall_vj"),o.dynCall_viij=be("dynCall_viij"),o.dynCall_viiiiij=be("dynCall_viiiiij"),o.dynCall_iijjiiii=be("dynCall_iijjiiii"),o.dynCall_jiji=be("dynCall_jiji"),o.dynCall_iiiiij=be("dynCall_iiiiij"),o.dynCall_iiiiijj=be("dynCall_iiiiijj"),o.dynCall_iiiiiijj=be("dynCall_iiiiiijj"),o.___start_em_js=514739,o.___stop_em_js=515259;o.addRunDependency=ce,o.removeRunDependency=le,o.FS_createPath=Oe.createPath,o.FS_createDataFile=Oe.createDataFile,o.FS_createPreloadedFile=Oe.createPreloadedFile,o.FS_createLazyFile=Oe.createLazyFile,o.FS_createDevice=Oe.createDevice,o.FS_unlink=Oe.unlink,o.GL=Ut;["run","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","addOnPreRun","addOnInit","addOnPreMain","addOnExit","addOnPostRun","FS_createFolder","FS_createLink","getLEB","getFunctionTables","alignFunctionTables","registerFunctions","prettyPrint","getCompilerSetting","out","err","callMain","abort","keepRuntimeAlive","wasmMemory","stackAlloc","stackSave","stackRestore","getTempRet0","setTempRet0","writeStackCookie","checkStackCookie","ptrToString","zeroMemory","stringToNewUTF8","exitJS","getHeapMax","emscripten_realloc_buffer","ENV","ERRNO_CODES","ERRNO_MESSAGES","setErrNo","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","DNS","getHostByName","Protocols","Sockets","getRandomDevice","warnOnce","traverseStack","UNWIND_CACHE","convertPCtoSourceLocation","readEmAsmArgsArray","readEmAsmArgs","runEmAsmFunction","runMainThreadEmAsm","jstoi_q","jstoi_s","getExecutableName","listenOnce","autoResumeAudioContext","dynCallLegacy","getDynCaller","dynCall","handleException","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","safeSetTimeout","asmjsMangle","asyncLoad","alignMemory","mmapAlloc","writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","getCFunc","ccall","cwrap","uleb128Encode","sigToWasmTypes","generateFuncType","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","addFunction","removeFunction","reallyNegative","unSign","strLen","reSign","formatString","setValue","getValue","PATH","PATH_FS","intArrayFromString","intArrayToString","AsciiToString","stringToAscii","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","allocateUTF8","allocateUTF8OnStack","writeStringToMemory","writeArrayToMemory","writeAsciiToMemory","SYSCALLS","getSocketFromFD","getSocketAddress","JSEvents","registerKeyEventCallback","specialHTMLTargets","findEventTarget","findCanvasEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","currentFullscreenStrategy","restoreOldWindowedStyle","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","battery","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","demangle","demangleAll","jsStackTrace","stackTrace","ExitStatus","getEnvStrings","checkWasiClock","doReadv","doWritev","dlopenMissingError","createDyncallWrapper","setImmediateWrapped","clearImmediateWrapped","polyfillSetImmediate","uncaughtExceptionCount","exceptionLast","exceptionCaught","ExceptionInfo","exception_addRef","exception_decRef","Browser","setMainLoop","wget","FS","MEMFS","TTY","PIPEFS","SOCKFS","_setNetworkCallback","tempFixedLengthArray","miniTempWebGLFloatBuffers","heapObjectForWebGLType","heapAccessShiftForWebGLHeap","emscriptenWebGLGet","computeUnpackAlignedImageSize","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","emscriptenWebGLGetBufferBinding","emscriptenWebGLValidateMapBufferTarget","writeGLArray","AL","SDL_unicode","SDL_ttfContext","SDL_audio","SDL","SDL_gfx","GLUT","EGL","GLFW_Window","GLFW","GLEW","IDBStore","runAndAbortIfError","emscriptenWebGLGetIndexed","WebGPU","JsValStore","ALLOC_NORMAL","ALLOC_STACK","allocate","InternalError","BindingError","UnboundTypeError","PureVirtualError","init_embind","throwInternalError","throwBindingError","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","extendError","createNamedFunction","embindRepr","registeredInstances","getBasestPointer","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","registeredTypes","awaitingDependencies","typeDependencies","registeredPointers","registerType","whenDependentTypesAreResolved","embind_charCodes","embind_init_charCodes","readLatin1String","getTypeName","heap32VectorToArray","requireRegisteredType","getShiftFromSize","integerReadValueFromPointer","enumReadValueFromPointer","floatReadValueFromPointer","simpleReadValueFromPointer","runDestructors","new_","craftInvokerFunction","embind__requireFunction","tupleRegistrations","structRegistrations","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_getPointee","RegisteredPointer_destructor","RegisteredPointer_deleteObject","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","ClassHandle_isAliasOf","throwInstanceAlreadyDeleted","ClassHandle_clone","ClassHandle_delete","deletionQueue","ClassHandle_isDeleted","ClassHandle_deleteLater","flushPendingDeletes","delayFunction","setDelayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","validateThis","char_0","char_9","makeLegalFunctionName","emval_handle_array","emval_free_list","emval_symbols","init_emval","count_emval_handles","get_first_emval","getStringOrSymbol","Emval","emval_newers","craftEmvalAllocator","emval_get_global","emval_lookupTypes","emval_allocateDestructors","emval_methodCallers","emval_addMethodCaller","emval_registeredMethods"].forEach((function(e){Object.getOwnPropertyDescriptor(o,e)||Object.defineProperty(o,e,{configurable:!0,get:function(){var r="'"+e+"' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)";S(e)&&(r+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),de(r)}})}));var Dn;function Bn(){var e;kn(),A(0==(3&(e=Fn()))),0==e&&(e+=4),N[e>>2]=34821223,N[e+4>>2]=2310721022,N[0]=1668509029}function Mn(e){function r(){Dn||(Dn=!0,o.calledRun=!0,L||(A(!te),te=!0,K(),o.noFSInit||Oe.init.initialized||Oe.init(),Oe.ignorePermissions=!1,Fe.init(),ze(Z),t(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),A(!o._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),function(){if(K(),o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)e=o.postRun.shift(),re.unshift(e);var e;ze(re)}()))}e=e||i,oe>0||(Bn(),function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)e=o.preRun.shift(),J.unshift(e);var e;ze(J)}(),oe>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),r()}),1)):r(),K()))}if(["inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","getHostByName","traverseStack","convertPCtoSourceLocation","runMainThreadEmAsm","jstoi_s","listenOnce","autoResumeAudioContext","runtimeKeepalivePush","runtimeKeepalivePop","asmjsMangle","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","convertU32PairToI53","getCFunc","ccall","cwrap","uleb128Encode","sigToWasmTypes","generateFuncType","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","addFunction","removeFunction","reallyNegative","unSign","strLen","reSign","formatString","intArrayToString","AsciiToString","stringToAscii","allocateUTF8OnStack","writeStringToMemory","getSocketFromFD","getSocketAddress","registerKeyEventCallback","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","battery","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","stackTrace","checkWasiClock","createDyncallWrapper","setImmediateWrapped","clearImmediateWrapped","polyfillSetImmediate","exception_addRef","exception_decRef","_setNetworkCallback","emscriptenWebGLGetUniform","emscriptenWebGLGetVertexAttrib","emscriptenWebGLGetBufferBinding","emscriptenWebGLValidateMapBufferTarget","writeGLArray","SDL_unicode","SDL_ttfContext","SDL_audio","GLFW_Window","runAndAbortIfError","emscriptenWebGLGetIndexed","ALLOC_NORMAL","ALLOC_STACK","allocate","enumReadValueFromPointer","craftEmvalAllocator"].forEach((function(e){"undefined"==typeof globalThis||Object.getOwnPropertyDescriptor(globalThis,e)||Object.defineProperty(globalThis,e,{configurable:!0,get:function(){var r="`"+e+"` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line",t=e;t.startsWith("_")||(t="$"+e),r+=" (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE="+t+")",S(e)&&(r+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),Ve(r)}})})),ie=function e(){Dn||Mn(),Dn||(ie=e)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return Mn(),r.ready}})();"object"==typeof exports&&"object"==typeof module?module.exports=createMediapipeSolutionsWasm:"function"==typeof define&&define.amd?define([],(function(){return createMediapipeSolutionsWasm})):"object"==typeof exports&&(exports.createMediapipeSolutionsWasm=createMediapipeSolutionsWasm); \ No newline at end of file diff --git a/build/assets/selfieSegmentation/selfie_segmentation_solution_simd_wasm_bin.wasm b/build/assets/selfieSegmentation/selfie_segmentation_solution_simd_wasm_bin.wasm new file mode 100644 index 0000000..c5437a8 Binary files /dev/null and b/build/assets/selfieSegmentation/selfie_segmentation_solution_simd_wasm_bin.wasm differ diff --git a/build/assets/selfieSegmentation/selfie_segmentation_solution_wasm_bin.js b/build/assets/selfieSegmentation/selfie_segmentation_solution_wasm_bin.js new file mode 100644 index 0000000..a2572c8 --- /dev/null +++ b/build/assets/selfieSegmentation/selfie_segmentation_solution_wasm_bin.js @@ -0,0 +1 @@ +var createMediapipeSolutionsWasm=(()=>{var e="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0;return"undefined"!=typeof __filename&&(e=e||__filename),function(r){var t,n,o=void 0!==(r=r||{})?r:{};o.ready=new Promise((function(e,r){t=e,n=r})),["_main","_fflush","___getTypeName","__embind_initialize_bindings","onRuntimeInitialized"].forEach((e=>{Object.getOwnPropertyDescriptor(o.ready,e)||Object.defineProperty(o.ready,e,{get:()=>de("You are getting "+e+" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js"),set:()=>de("You are setting "+e+" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")})}));var a=Object.assign({},o),i=[],s="./this.program",u=(e,r)=>{throw r},c="object"==typeof window,l="function"==typeof importScripts,d="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,f=!c&&!d&&!l;if(o.ENVIRONMENT)throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");var m,p,g,v="";function h(e){if(e instanceof Ce)return;let r=e;e&&"object"==typeof e&&e.stack&&(r=[e,e.stack]),E("exiting due to exception: "+r)}if(d){if("undefined"==typeof process||!process.release||"node"!==process.release.name)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var y=require("fs"),b=require("path");v=l?b.dirname(v)+"/":__dirname+"/",m=(e,r)=>(e=ye(e)?new URL(e):b.normalize(e),y.readFileSync(e,r?void 0:"utf8")),g=e=>{var r=m(e,!0);return r.buffer||(r=new Uint8Array(r)),A(r.buffer),r},p=(e,r,t)=>{e=ye(e)?new URL(e):b.normalize(e),y.readFile(e,(function(e,n){e?t(e):r(n.buffer)}))},process.argv.length>1&&(s=process.argv[1].replace(/\\/g,"/")),i=process.argv.slice(2),process.on("uncaughtException",(function(e){if(!(e instanceof Ce))throw e})),process.on("unhandledRejection",(function(e){throw e})),u=(e,r)=>{if(ne())throw process.exitCode=e,r;h(r),process.exit(e)},o.inspect=function(){return"[Emscripten Module object]"}}else if(f){if("object"==typeof process&&"function"==typeof require||"object"==typeof window||"function"==typeof importScripts)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");"undefined"!=typeof read&&(m=function(e){return read(e)}),g=function(e){let r;return"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(r=read(e,"binary"),A("object"==typeof r),r)},p=function(e,r,t){setTimeout((()=>r(g(e))),0)},"undefined"!=typeof scriptArgs?i=scriptArgs:void 0!==arguments&&(i=arguments),"function"==typeof quit&&(u=(e,r)=>{h(r),quit(e)}),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)}else{if(!c&&!l)throw new Error("environment detection error");if(l?v=self.location.href:"undefined"!=typeof document&&document.currentScript&&(v=document.currentScript.src),e&&(v=e),v=0!==v.indexOf("blob:")?v.substr(0,v.replace(/[?#].*/,"").lastIndexOf("/")+1):"","object"!=typeof window&&"function"!=typeof importScripts)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");m=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},l&&(g=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),p=(e,r,t)=>{var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=()=>{200==n.status||0==n.status&&n.response?r(n.response):t()},n.onerror=t,n.send(null)},e=>document.title=e}var w,_=o.print||console.log.bind(console),E=o.printErr||console.warn.bind(console);Object.assign(o,a),a=null,w="fetchSettings",Object.getOwnPropertyDescriptor(o,w)&&de("`Module."+w+"` was supplied but `"+w+"` not included in INCOMING_MODULE_JS_API"),o.arguments&&(i=o.arguments),T("arguments","arguments_"),o.thisProgram&&(s=o.thisProgram),T("thisProgram","thisProgram"),o.quit&&(u=o.quit),T("quit","quit_"),A(void 0===o.memoryInitializerPrefixURL,"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),A(void 0===o.pthreadMainPrefixURL,"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),A(void 0===o.cdInitializerPrefixURL,"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),A(void 0===o.filePackagePrefixURL,"Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),A(void 0===o.read,"Module.read option was removed (modify read_ in JS)"),A(void 0===o.readAsync,"Module.readAsync option was removed (modify readAsync in JS)"),A(void 0===o.readBinary,"Module.readBinary option was removed (modify readBinary in JS)"),A(void 0===o.setWindowTitle,"Module.setWindowTitle option was removed (modify setWindowTitle in JS)"),A(void 0===o.TOTAL_MEMORY,"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),T("read","read_"),T("readAsync","readAsync"),T("readBinary","readBinary"),T("setWindowTitle","setWindowTitle"),A(!f,"shell environment detected but not enabled at build time. Add 'shell' to `-sENVIRONMENT` to enable.");var x,C=4;function T(e,r){Object.getOwnPropertyDescriptor(o,e)||Object.defineProperty(o,e,{configurable:!0,get:function(){de("Module."+e+" has been replaced with plain "+r+" (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}function S(e){return"FS_createPath"===e||"FS_createDataFile"===e||"FS_createPreloadedFile"===e||"FS_unlink"===e||"addRunDependency"===e||"FS_createLazyFile"===e||"FS_createDevice"===e||"removeRunDependency"===e}o.wasmBinary&&(x=o.wasmBinary),T("wasmBinary","wasmBinary");var P,k=o.noExitRuntime||!0;T("noExitRuntime","noExitRuntime"),"object"!=typeof WebAssembly&&de("no native wasm support detected");var F,L=!1;function A(e,r){e||de("Assertion failed"+(r?": "+r:""))}var D,B,M,O,R,I,N,j,U,V="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function $(e,r,t){for(var n=r+t,o=r;e[o]&&!(o>=n);)++o;if(o-r>16&&e.buffer&&V)return V.decode(e.subarray(r,o));for(var a="";r>10,56320|1023&c)}}else a+=String.fromCharCode((31&i)<<6|s)}else a+=String.fromCharCode(i)}return a}function z(e,r){return e?$(M,e,r):""}function G(e,r,t,n){if(!(n>0))return 0;for(var o=t,a=t+n-1,i=0;i=55296&&s<=57343)s=65536+((1023&s)<<10)|1023&e.charCodeAt(++i);if(s<=127){if(t>=a)break;r[t++]=s}else if(s<=2047){if(t+1>=a)break;r[t++]=192|s>>6,r[t++]=128|63&s}else if(s<=65535){if(t+2>=a)break;r[t++]=224|s>>12,r[t++]=128|s>>6&63,r[t++]=128|63&s}else{if(t+3>=a)break;s>1114111&&Ve("Invalid Unicode code point "+Ge(s)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF)."),r[t++]=240|s>>18,r[t++]=128|s>>12&63,r[t++]=128|s>>6&63,r[t++]=128|63&s}}return r[t]=0,t-o}function W(e,r,t){return A("number"==typeof t,"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),G(e,M,r,t)}function H(e){for(var r=0,t=0;t=55296&&n<=57343?(r+=4,++t):r+=3}return r}function q(e){D=e,o.HEAP8=B=new Int8Array(e),o.HEAP16=O=new Int16Array(e),o.HEAP32=I=new Int32Array(e),o.HEAPU8=M=new Uint8Array(e),o.HEAPU16=R=new Uint16Array(e),o.HEAPU32=N=new Uint32Array(e),o.HEAPF32=j=new Float32Array(e),o.HEAPF64=U=new Float64Array(e)}var Y=65536;o.STACK_SIZE&&A(Y===o.STACK_SIZE,"the stack size can no longer be determined at runtime");var X,Q=o.INITIAL_MEMORY||16777216;function K(){if(!L){var e=Fn();0==e&&(e+=4);var r=N[e>>2],t=N[e+4>>2];34821223==r&&2310721022==t||de("Stack overflow! Stack cookie has been overwritten at "+Ge(e)+", expected hex dwords 0x89BACDFE and 0x2135467, but received "+Ge(t)+" "+Ge(r)),1668509029!==N[0]&&de("Runtime error: The application has corrupted its heap memory area (address zero)!")}}T("INITIAL_MEMORY","INITIAL_MEMORY"),A(Q>=Y,"INITIAL_MEMORY should be larger than STACK_SIZE, was "+Q+"! (STACK_SIZE="+Y+")"),A("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&null!=Int32Array.prototype.subarray&&null!=Int32Array.prototype.set,"JS engine does not provide full typed array support"),A(!o.wasmMemory,"Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),A(16777216==Q,"Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),function(){var e=new Int16Array(1),r=new Int8Array(e.buffer);if(e[0]=25459,115!==r[0]||99!==r[1])throw"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)"}();var J=[],Z=[],ee=[],re=[],te=!1;function ne(){return k}A(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),A(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),A(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),A(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var oe=0,ae=null,ie=null,se={};function ue(e){for(var r=e;;){if(!se[e])return e;e=r+Math.random()}}function ce(e){oe++,o.monitorRunDependencies&&o.monitorRunDependencies(oe),e?(A(!se[e]),se[e]=1,null===ae&&"undefined"!=typeof setInterval&&(ae=setInterval((function(){if(L)return clearInterval(ae),void(ae=null);var e=!1;for(var r in se)e||(e=!0,E("still waiting on run dependencies:")),E("dependency: "+r);e&&E("(end of list)")}),1e4))):E("warning: run dependency added without ID")}function le(e){if(oe--,o.monitorRunDependencies&&o.monitorRunDependencies(oe),e?(A(se[e]),delete se[e]):E("warning: run dependency removed without ID"),0==oe&&(null!==ae&&(clearInterval(ae),ae=null),ie)){var r=ie;ie=null,r()}}function de(e){o.onAbort&&o.onAbort(e),E(e="Aborted("+e+")"),L=!0,F=1;var r=new WebAssembly.RuntimeError(e);throw n(r),r}var fe,me,pe,ge,ve="data:application/octet-stream;base64,";function he(e){return e.startsWith(ve)}function ye(e){return e.startsWith("file://")}function be(e,r){return function(){var t=e,n=r;return r||(n=o.asm),A(te,"native function `"+t+"` called before runtime initialization"),n[e]||A(n[e],"exported native function `"+t+"` not found"),n[e].apply(null,arguments)}}function we(e){try{if(e==fe&&x)return new Uint8Array(x);if(g)return g(e);throw"both async and sync fetching of the wasm failed"}catch(e){de(e)}}he(fe="selfie_segmentation_solution_wasm_bin.wasm")||(me=fe,fe=o.locateFile?o.locateFile(me,v):v+me);var _e,Ee={512868:e=>{const r=or.toValue(e).getContext("webgpu");return Yt.add(r.getCurrentTexture())},513003:(e,r,t,n,o)=>{const a=or.toValue(e),i=Yt.get(r),s=Yt.get(t),u=n,c=o;i.queue.copyExternalImageToTexture({source:a},{texture:s},[u,c])},513254:(e,r,t,n)=>{const o=or.toValue(e),a=Yt.get(r),i=Yt.get(t),s=Yt.get(n),u=a.createBindGroup({layout:s,entries:[{binding:0,resource:i},{binding:1,resource:o}]});return Yt.add(u)},513602:(e,r)=>{const t=or.toValue(e),n=or.toValue(r),o=n.getContext("2d"),a=new ImageData(t,n.width,n.height);o.putImageData(a,0,0)},513826:(e,r)=>{const t=or.toValue(e),n=or.toValue(r),o=t.getContext("2d").getImageData(0,0,t.width,t.height);n.set(o.data)},514030:(e,r)=>{const t=or.toValue(e);or.toValue(r).getContext("2d").drawImage(t,0,0)},514166:()=>!!o.preinitializedWebGPUDevice,514217:()=>{let e=!0;if(e){const r=Gt;if("function"!=typeof r)return void("undefined"!=typeof console&&console.error('Expected Emscripten global function "findCanvasEventTarget" not found. WebGL context creation may fail.'));Gt=function(e){if(0==e){if(o&&o.canvas)return o.canvas;if(o&&o.canvasCssSelector)return r(o.canvasCssSelector);"undefined"!=typeof console&&console.warn("Module properties canvas and canvasCssSelector not found during WebGL context creation.")}return r(e)},e=!1}},515002:()=>"undefined"!=typeof wasmOffsetConverter};function xe(e,r){if($e.mainLoop.timingMode=e,$e.mainLoop.timingValue=r,!$e.mainLoop.func)return E("emscripten_set_main_loop_timing: Cannot set timing mode for main loop since a main loop does not exist! Call emscripten_set_main_loop first to set one up."),1;if($e.mainLoop.running||($e.mainLoop.running=!0),0==e)$e.mainLoop.scheduler=function(){var e=0|Math.max(0,$e.mainLoop.tickStartTime+r-_e());setTimeout($e.mainLoop.runner,e)},$e.mainLoop.method="timeout";else if(1==e)$e.mainLoop.scheduler=function(){$e.requestAnimationFrame($e.mainLoop.runner)},$e.mainLoop.method="rAF";else if(2==e){if("undefined"==typeof setImmediate){var t=[],n="setimmediate";addEventListener("message",(e=>{e.data!==n&&e.data.target!==n||(e.stopPropagation(),t.shift()())}),!0),setImmediate=function(e){t.push(e),l?(void 0===o.setImmediates&&(o.setImmediates=[]),o.setImmediates.push(e),postMessage({target:n})):postMessage(n,"*")}}$e.mainLoop.scheduler=function(){setImmediate($e.mainLoop.runner)},$e.mainLoop.method="immediate"}return 0}function Ce(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}_e=d?()=>{var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:()=>performance.now();var Te={isAbs:e=>"/"===e.charAt(0),splitPath:e=>/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1),normalizeArray:(e,r)=>{for(var t=0,n=e.length-1;n>=0;n--){var o=e[n];"."===o?e.splice(n,1):".."===o?(e.splice(n,1),t++):t&&(e.splice(n,1),t--)}if(r)for(;t;t--)e.unshift("..");return e},normalize:e=>{var r=Te.isAbs(e),t="/"===e.substr(-1);return(e=Te.normalizeArray(e.split("/").filter((e=>!!e)),!r).join("/"))||r||(e="."),e&&t&&(e+="/"),(r?"/":"")+e},dirname:e=>{var r=Te.splitPath(e),t=r[0],n=r[1];return t||n?(n&&(n=n.substr(0,n.length-1)),t+n):"."},basename:e=>{if("/"===e)return"/";var r=(e=(e=Te.normalize(e)).replace(/\/$/,"")).lastIndexOf("/");return-1===r?e:e.substr(r+1)},join:function(){var e=Array.prototype.slice.call(arguments);return Te.normalize(e.join("/"))},join2:(e,r)=>Te.normalize(e+"/"+r)};function Se(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var e=new Uint8Array(1);return()=>(crypto.getRandomValues(e),e[0])}if(d)try{var r=require("crypto");return()=>r.randomBytes(1)[0]}catch(e){}return()=>de("no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };")}var Pe={resolve:function(){for(var e="",r=!1,t=arguments.length-1;t>=-1&&!r;t--){var n=t>=0?arguments[t]:Oe.cwd();if("string"!=typeof n)throw new TypeError("Arguments to path.resolve must be strings");if(!n)return"";e=n+"/"+e,r=Te.isAbs(n)}return(r?"/":"")+(e=Te.normalizeArray(e.split("/").filter((e=>!!e)),!r).join("/"))||"."},relative:(e,r)=>{function t(e){for(var r=0;r=0&&""===e[t];t--);return r>t?[]:e.slice(r,t-r+1)}e=Pe.resolve(e).substr(1),r=Pe.resolve(r).substr(1);for(var n=t(e.split("/")),o=t(r.split("/")),a=Math.min(n.length,o.length),i=a,s=0;s0?t:H(e)+1,o=new Array(n),a=G(e,o,0,o.length);return r&&(o.length=a),o}var Fe={ttys:[],init:function(){},shutdown:function(){},register:function(e,r){Fe.ttys[e]={input:[],output:[],ops:r},Oe.registerDevice(e,Fe.stream_ops)},stream_ops:{open:function(e){var r=Fe.ttys[e.node.rdev];if(!r)throw new Oe.ErrnoError(43);e.tty=r,e.seekable=!1},close:function(e){e.tty.ops.fsync(e.tty)},fsync:function(e){e.tty.ops.fsync(e.tty)},read:function(e,r,t,n,o){if(!e.tty||!e.tty.ops.get_char)throw new Oe.ErrnoError(60);for(var a=0,i=0;i0?t.slice(0,n).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(r=window.prompt("Input: "))&&(r+="\n"):"function"==typeof readline&&null!==(r=readline())&&(r+="\n");if(!r)return null;e.input=ke(r,!0)}return e.input.shift()},put_char:function(e,r){null===r||10===r?(_($(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},fsync:function(e){e.output&&e.output.length>0&&(_($(e.output,0)),e.output=[])}},default_tty1_ops:{put_char:function(e,r){null===r||10===r?(E($(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},fsync:function(e){e.output&&e.output.length>0&&(E($(e.output,0)),e.output=[])}}};function Le(e){e=function(e,r){return A(r,"alignment argument is required"),Math.ceil(e/r)*r}(e,65536);var r=Pn(65536,e);return r?function(e,r){return M.fill(0,e,e+r),e}(r,e):0}var Ae={ops_table:null,mount:function(e){return Ae.createNode(null,"/",16895,0)},createNode:function(e,r,t,n){if(Oe.isBlkdev(t)||Oe.isFIFO(t))throw new Oe.ErrnoError(63);Ae.ops_table||(Ae.ops_table={dir:{node:{getattr:Ae.node_ops.getattr,setattr:Ae.node_ops.setattr,lookup:Ae.node_ops.lookup,mknod:Ae.node_ops.mknod,rename:Ae.node_ops.rename,unlink:Ae.node_ops.unlink,rmdir:Ae.node_ops.rmdir,readdir:Ae.node_ops.readdir,symlink:Ae.node_ops.symlink},stream:{llseek:Ae.stream_ops.llseek}},file:{node:{getattr:Ae.node_ops.getattr,setattr:Ae.node_ops.setattr},stream:{llseek:Ae.stream_ops.llseek,read:Ae.stream_ops.read,write:Ae.stream_ops.write,allocate:Ae.stream_ops.allocate,mmap:Ae.stream_ops.mmap,msync:Ae.stream_ops.msync}},link:{node:{getattr:Ae.node_ops.getattr,setattr:Ae.node_ops.setattr,readlink:Ae.node_ops.readlink},stream:{}},chrdev:{node:{getattr:Ae.node_ops.getattr,setattr:Ae.node_ops.setattr},stream:Oe.chrdev_stream_ops}});var o=Oe.createNode(e,r,t,n);return Oe.isDir(o.mode)?(o.node_ops=Ae.ops_table.dir.node,o.stream_ops=Ae.ops_table.dir.stream,o.contents={}):Oe.isFile(o.mode)?(o.node_ops=Ae.ops_table.file.node,o.stream_ops=Ae.ops_table.file.stream,o.usedBytes=0,o.contents=null):Oe.isLink(o.mode)?(o.node_ops=Ae.ops_table.link.node,o.stream_ops=Ae.ops_table.link.stream):Oe.isChrdev(o.mode)&&(o.node_ops=Ae.ops_table.chrdev.node,o.stream_ops=Ae.ops_table.chrdev.stream),o.timestamp=Date.now(),e&&(e.contents[r]=o,e.timestamp=o.timestamp),o},getFileDataAsTypedArray:function(e){return e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0)},expandFileStorage:function(e,r){var t=e.contents?e.contents.length:0;if(!(t>=r)){r=Math.max(r,t*(t<1048576?2:1.125)>>>0),0!=t&&(r=Math.max(r,256));var n=e.contents;e.contents=new Uint8Array(r),e.usedBytes>0&&e.contents.set(n.subarray(0,e.usedBytes),0)}},resizeFileStorage:function(e,r){if(e.usedBytes!=r)if(0==r)e.contents=null,e.usedBytes=0;else{var t=e.contents;e.contents=new Uint8Array(r),t&&e.contents.set(t.subarray(0,Math.min(r,e.usedBytes))),e.usedBytes=r}},node_ops:{getattr:function(e){var r={};return r.dev=Oe.isChrdev(e.mode)?e.id:1,r.ino=e.id,r.mode=e.mode,r.nlink=1,r.uid=0,r.gid=0,r.rdev=e.rdev,Oe.isDir(e.mode)?r.size=4096:Oe.isFile(e.mode)?r.size=e.usedBytes:Oe.isLink(e.mode)?r.size=e.link.length:r.size=0,r.atime=new Date(e.timestamp),r.mtime=new Date(e.timestamp),r.ctime=new Date(e.timestamp),r.blksize=4096,r.blocks=Math.ceil(r.size/r.blksize),r},setattr:function(e,r){void 0!==r.mode&&(e.mode=r.mode),void 0!==r.timestamp&&(e.timestamp=r.timestamp),void 0!==r.size&&Ae.resizeFileStorage(e,r.size)},lookup:function(e,r){throw Oe.genericErrors[44]},mknod:function(e,r,t,n){return Ae.createNode(e,r,t,n)},rename:function(e,r,t){if(Oe.isDir(e.mode)){var n;try{n=Oe.lookupNode(r,t)}catch(e){}if(n)for(var o in n.contents)throw new Oe.ErrnoError(55)}delete e.parent.contents[e.name],e.parent.timestamp=Date.now(),e.name=t,r.contents[t]=e,r.timestamp=e.parent.timestamp,e.parent=r},unlink:function(e,r){delete e.contents[r],e.timestamp=Date.now()},rmdir:function(e,r){var t=Oe.lookupNode(e,r);for(var n in t.contents)throw new Oe.ErrnoError(55);delete e.contents[r],e.timestamp=Date.now()},readdir:function(e){var r=[".",".."];for(var t in e.contents)e.contents.hasOwnProperty(t)&&r.push(t);return r},symlink:function(e,r,t){var n=Ae.createNode(e,r,41471,0);return n.link=t,n},readlink:function(e){if(!Oe.isLink(e.mode))throw new Oe.ErrnoError(28);return e.link}},stream_ops:{read:function(e,r,t,n,o){var a=e.node.contents;if(o>=e.node.usedBytes)return 0;var i=Math.min(e.node.usedBytes-o,n);if(A(i>=0),i>8&&a.subarray)r.set(a.subarray(o,o+i),t);else for(var s=0;s0||t+r{if(!(e=Pe.resolve(e)))return{path:"",node:null};if((r=Object.assign({follow_mount:!0,recurse_count:0},r)).recurse_count>8)throw new Oe.ErrnoError(32);for(var t=e.split("/").filter((e=>!!e)),n=Oe.root,o="/",a=0;a40)throw new Oe.ErrnoError(32)}}return{path:o,node:n}},getPath:e=>{for(var r;;){if(Oe.isRoot(e)){var t=e.mount.mountpoint;return r?"/"!==t[t.length-1]?t+"/"+r:t+r:t}r=r?e.name+"/"+r:e.name,e=e.parent}},hashName:(e,r)=>{for(var t=0,n=0;n>>0)%Oe.nameTable.length},hashAddNode:e=>{var r=Oe.hashName(e.parent.id,e.name);e.name_next=Oe.nameTable[r],Oe.nameTable[r]=e},hashRemoveNode:e=>{var r=Oe.hashName(e.parent.id,e.name);if(Oe.nameTable[r]===e)Oe.nameTable[r]=e.name_next;else for(var t=Oe.nameTable[r];t;){if(t.name_next===e){t.name_next=e.name_next;break}t=t.name_next}},lookupNode:(e,r)=>{var t=Oe.mayLookup(e);if(t)throw new Oe.ErrnoError(t,e);for(var n=Oe.hashName(e.id,r),o=Oe.nameTable[n];o;o=o.name_next){var a=o.name;if(o.parent.id===e.id&&a===r)return o}return Oe.lookup(e,r)},createNode:(e,r,t,n)=>{A("object"==typeof e);var o=new Oe.FSNode(e,r,t,n);return Oe.hashAddNode(o),o},destroyNode:e=>{Oe.hashRemoveNode(e)},isRoot:e=>e===e.parent,isMountpoint:e=>!!e.mounted,isFile:e=>32768==(61440&e),isDir:e=>16384==(61440&e),isLink:e=>40960==(61440&e),isChrdev:e=>8192==(61440&e),isBlkdev:e=>24576==(61440&e),isFIFO:e=>4096==(61440&e),isSocket:e=>49152==(49152&e),flagModes:{r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},modeStringToFlags:e=>{var r=Oe.flagModes[e];if(void 0===r)throw new Error("Unknown file open mode: "+e);return r},flagsToPermissionString:e=>{var r=["r","w","rw"][3&e];return 512&e&&(r+="w"),r},nodePermissions:(e,r)=>Oe.ignorePermissions||(!r.includes("r")||292&e.mode)&&(!r.includes("w")||146&e.mode)&&(!r.includes("x")||73&e.mode)?0:2,mayLookup:e=>{var r=Oe.nodePermissions(e,"x");return r||(e.node_ops.lookup?0:2)},mayCreate:(e,r)=>{try{Oe.lookupNode(e,r);return 20}catch(e){}return Oe.nodePermissions(e,"wx")},mayDelete:(e,r,t)=>{var n;try{n=Oe.lookupNode(e,r)}catch(e){return e.errno}var o=Oe.nodePermissions(e,"wx");if(o)return o;if(t){if(!Oe.isDir(n.mode))return 54;if(Oe.isRoot(n)||Oe.getPath(n)===Oe.cwd())return 10}else if(Oe.isDir(n.mode))return 31;return 0},mayOpen:(e,r)=>e?Oe.isLink(e.mode)?32:Oe.isDir(e.mode)&&("r"!==Oe.flagsToPermissionString(r)||512&r)?31:Oe.nodePermissions(e,Oe.flagsToPermissionString(r)):44,MAX_OPEN_FDS:4096,nextfd:(e=0,r=Oe.MAX_OPEN_FDS)=>{for(var t=e;t<=r;t++)if(!Oe.streams[t])return t;throw new Oe.ErrnoError(33)},getStream:e=>Oe.streams[e],createStream:(e,r,t)=>{Oe.FSStream||(Oe.FSStream=function(){this.shared={}},Oe.FSStream.prototype={},Object.defineProperties(Oe.FSStream.prototype,{object:{get:function(){return this.node},set:function(e){this.node=e}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}},flags:{get:function(){return this.shared.flags},set:function(e){this.shared.flags=e}},position:{get:function(){return this.shared.position},set:function(e){this.shared.position=e}}})),e=Object.assign(new Oe.FSStream,e);var n=Oe.nextfd(r,t);return e.fd=n,Oe.streams[n]=e,e},closeStream:e=>{Oe.streams[e]=null},chrdev_stream_ops:{open:e=>{var r=Oe.getDevice(e.node.rdev);e.stream_ops=r.stream_ops,e.stream_ops.open&&e.stream_ops.open(e)},llseek:()=>{throw new Oe.ErrnoError(70)}},major:e=>e>>8,minor:e=>255&e,makedev:(e,r)=>e<<8|r,registerDevice:(e,r)=>{Oe.devices[e]={stream_ops:r}},getDevice:e=>Oe.devices[e],getMounts:e=>{for(var r=[],t=[e];t.length;){var n=t.pop();r.push(n),t.push.apply(t,n.mounts)}return r},syncfs:(e,r)=>{"function"==typeof e&&(r=e,e=!1),Oe.syncFSRequests++,Oe.syncFSRequests>1&&E("warning: "+Oe.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var t=Oe.getMounts(Oe.root.mount),n=0;function o(e){return A(Oe.syncFSRequests>0),Oe.syncFSRequests--,r(e)}function a(e){if(e)return a.errored?void 0:(a.errored=!0,o(e));++n>=t.length&&o(null)}t.forEach((r=>{if(!r.type.syncfs)return a(null);r.type.syncfs(r,e,a)}))},mount:(e,r,t)=>{if("string"==typeof e)throw e;var n,o="/"===t,a=!t;if(o&&Oe.root)throw new Oe.ErrnoError(10);if(!o&&!a){var i=Oe.lookupPath(t,{follow_mount:!1});if(t=i.path,n=i.node,Oe.isMountpoint(n))throw new Oe.ErrnoError(10);if(!Oe.isDir(n.mode))throw new Oe.ErrnoError(54)}var s={type:e,opts:r,mountpoint:t,mounts:[]},u=e.mount(s);return u.mount=s,s.root=u,o?Oe.root=u:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),u},unmount:e=>{var r=Oe.lookupPath(e,{follow_mount:!1});if(!Oe.isMountpoint(r.node))throw new Oe.ErrnoError(28);var t=r.node,n=t.mounted,o=Oe.getMounts(n);Object.keys(Oe.nameTable).forEach((e=>{for(var r=Oe.nameTable[e];r;){var t=r.name_next;o.includes(r.mount)&&Oe.destroyNode(r),r=t}})),t.mounted=null;var a=t.mount.mounts.indexOf(n);A(-1!==a),t.mount.mounts.splice(a,1)},lookup:(e,r)=>e.node_ops.lookup(e,r),mknod:(e,r,t)=>{var n=Oe.lookupPath(e,{parent:!0}).node,o=Te.basename(e);if(!o||"."===o||".."===o)throw new Oe.ErrnoError(28);var a=Oe.mayCreate(n,o);if(a)throw new Oe.ErrnoError(a);if(!n.node_ops.mknod)throw new Oe.ErrnoError(63);return n.node_ops.mknod(n,o,r,t)},create:(e,r)=>(r=void 0!==r?r:438,r&=4095,r|=32768,Oe.mknod(e,r,0)),mkdir:(e,r)=>(r=void 0!==r?r:511,r&=1023,r|=16384,Oe.mknod(e,r,0)),mkdirTree:(e,r)=>{for(var t=e.split("/"),n="",o=0;o(void 0===t&&(t=r,r=438),r|=8192,Oe.mknod(e,r,t)),symlink:(e,r)=>{if(!Pe.resolve(e))throw new Oe.ErrnoError(44);var t=Oe.lookupPath(r,{parent:!0}).node;if(!t)throw new Oe.ErrnoError(44);var n=Te.basename(r),o=Oe.mayCreate(t,n);if(o)throw new Oe.ErrnoError(o);if(!t.node_ops.symlink)throw new Oe.ErrnoError(63);return t.node_ops.symlink(t,n,e)},rename:(e,r)=>{var t,n,o=Te.dirname(e),a=Te.dirname(r),i=Te.basename(e),s=Te.basename(r);if(t=Oe.lookupPath(e,{parent:!0}).node,n=Oe.lookupPath(r,{parent:!0}).node,!t||!n)throw new Oe.ErrnoError(44);if(t.mount!==n.mount)throw new Oe.ErrnoError(75);var u,c=Oe.lookupNode(t,i),l=Pe.relative(e,a);if("."!==l.charAt(0))throw new Oe.ErrnoError(28);if("."!==(l=Pe.relative(r,o)).charAt(0))throw new Oe.ErrnoError(55);try{u=Oe.lookupNode(n,s)}catch(e){}if(c!==u){var d=Oe.isDir(c.mode),f=Oe.mayDelete(t,i,d);if(f)throw new Oe.ErrnoError(f);if(f=u?Oe.mayDelete(n,s,d):Oe.mayCreate(n,s))throw new Oe.ErrnoError(f);if(!t.node_ops.rename)throw new Oe.ErrnoError(63);if(Oe.isMountpoint(c)||u&&Oe.isMountpoint(u))throw new Oe.ErrnoError(10);if(n!==t&&(f=Oe.nodePermissions(t,"w")))throw new Oe.ErrnoError(f);Oe.hashRemoveNode(c);try{t.node_ops.rename(c,n,s)}catch(e){throw e}finally{Oe.hashAddNode(c)}}},rmdir:e=>{var r=Oe.lookupPath(e,{parent:!0}).node,t=Te.basename(e),n=Oe.lookupNode(r,t),o=Oe.mayDelete(r,t,!0);if(o)throw new Oe.ErrnoError(o);if(!r.node_ops.rmdir)throw new Oe.ErrnoError(63);if(Oe.isMountpoint(n))throw new Oe.ErrnoError(10);r.node_ops.rmdir(r,t),Oe.destroyNode(n)},readdir:e=>{var r=Oe.lookupPath(e,{follow:!0}).node;if(!r.node_ops.readdir)throw new Oe.ErrnoError(54);return r.node_ops.readdir(r)},unlink:e=>{var r=Oe.lookupPath(e,{parent:!0}).node;if(!r)throw new Oe.ErrnoError(44);var t=Te.basename(e),n=Oe.lookupNode(r,t),o=Oe.mayDelete(r,t,!1);if(o)throw new Oe.ErrnoError(o);if(!r.node_ops.unlink)throw new Oe.ErrnoError(63);if(Oe.isMountpoint(n))throw new Oe.ErrnoError(10);r.node_ops.unlink(r,t),Oe.destroyNode(n)},readlink:e=>{var r=Oe.lookupPath(e).node;if(!r)throw new Oe.ErrnoError(44);if(!r.node_ops.readlink)throw new Oe.ErrnoError(28);return Pe.resolve(Oe.getPath(r.parent),r.node_ops.readlink(r))},stat:(e,r)=>{var t=Oe.lookupPath(e,{follow:!r}).node;if(!t)throw new Oe.ErrnoError(44);if(!t.node_ops.getattr)throw new Oe.ErrnoError(63);return t.node_ops.getattr(t)},lstat:e=>Oe.stat(e,!0),chmod:(e,r,t)=>{var n;"string"==typeof e?n=Oe.lookupPath(e,{follow:!t}).node:n=e;if(!n.node_ops.setattr)throw new Oe.ErrnoError(63);n.node_ops.setattr(n,{mode:4095&r|-4096&n.mode,timestamp:Date.now()})},lchmod:(e,r)=>{Oe.chmod(e,r,!0)},fchmod:(e,r)=>{var t=Oe.getStream(e);if(!t)throw new Oe.ErrnoError(8);Oe.chmod(t.node,r)},chown:(e,r,t,n)=>{var o;"string"==typeof e?o=Oe.lookupPath(e,{follow:!n}).node:o=e;if(!o.node_ops.setattr)throw new Oe.ErrnoError(63);o.node_ops.setattr(o,{timestamp:Date.now()})},lchown:(e,r,t)=>{Oe.chown(e,r,t,!0)},fchown:(e,r,t)=>{var n=Oe.getStream(e);if(!n)throw new Oe.ErrnoError(8);Oe.chown(n.node,r,t)},truncate:(e,r)=>{if(r<0)throw new Oe.ErrnoError(28);var t;"string"==typeof e?t=Oe.lookupPath(e,{follow:!0}).node:t=e;if(!t.node_ops.setattr)throw new Oe.ErrnoError(63);if(Oe.isDir(t.mode))throw new Oe.ErrnoError(31);if(!Oe.isFile(t.mode))throw new Oe.ErrnoError(28);var n=Oe.nodePermissions(t,"w");if(n)throw new Oe.ErrnoError(n);t.node_ops.setattr(t,{size:r,timestamp:Date.now()})},ftruncate:(e,r)=>{var t=Oe.getStream(e);if(!t)throw new Oe.ErrnoError(8);if(0==(2097155&t.flags))throw new Oe.ErrnoError(28);Oe.truncate(t.node,r)},utime:(e,r,t)=>{var n=Oe.lookupPath(e,{follow:!0}).node;n.node_ops.setattr(n,{timestamp:Math.max(r,t)})},open:(e,r,t)=>{if(""===e)throw new Oe.ErrnoError(44);var n;if(t=void 0===t?438:t,t=64&(r="string"==typeof r?Oe.modeStringToFlags(r):r)?4095&t|32768:0,"object"==typeof e)n=e;else{e=Te.normalize(e);try{n=Oe.lookupPath(e,{follow:!(131072&r)}).node}catch(e){}}var a=!1;if(64&r)if(n){if(128&r)throw new Oe.ErrnoError(20)}else n=Oe.mknod(e,t,0),a=!0;if(!n)throw new Oe.ErrnoError(44);if(Oe.isChrdev(n.mode)&&(r&=-513),65536&r&&!Oe.isDir(n.mode))throw new Oe.ErrnoError(54);if(!a){var i=Oe.mayOpen(n,r);if(i)throw new Oe.ErrnoError(i)}512&r&&!a&&Oe.truncate(n,0),r&=-131713;var s=Oe.createStream({node:n,path:Oe.getPath(n),flags:r,seekable:!0,position:0,stream_ops:n.stream_ops,ungotten:[],error:!1});return s.stream_ops.open&&s.stream_ops.open(s),!o.logReadFiles||1&r||(Oe.readFiles||(Oe.readFiles={}),e in Oe.readFiles||(Oe.readFiles[e]=1)),s},close:e=>{if(Oe.isClosed(e))throw new Oe.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(e){throw e}finally{Oe.closeStream(e.fd)}e.fd=null},isClosed:e=>null===e.fd,llseek:(e,r,t)=>{if(Oe.isClosed(e))throw new Oe.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new Oe.ErrnoError(70);if(0!=t&&1!=t&&2!=t)throw new Oe.ErrnoError(28);return e.position=e.stream_ops.llseek(e,r,t),e.ungotten=[],e.position},read:(e,r,t,n,o)=>{if(n<0||o<0)throw new Oe.ErrnoError(28);if(Oe.isClosed(e))throw new Oe.ErrnoError(8);if(1==(2097155&e.flags))throw new Oe.ErrnoError(8);if(Oe.isDir(e.node.mode))throw new Oe.ErrnoError(31);if(!e.stream_ops.read)throw new Oe.ErrnoError(28);var a=void 0!==o;if(a){if(!e.seekable)throw new Oe.ErrnoError(70)}else o=e.position;var i=e.stream_ops.read(e,r,t,n,o);return a||(e.position+=i),i},write:(e,r,t,n,o,a)=>{if(n<0||o<0)throw new Oe.ErrnoError(28);if(Oe.isClosed(e))throw new Oe.ErrnoError(8);if(0==(2097155&e.flags))throw new Oe.ErrnoError(8);if(Oe.isDir(e.node.mode))throw new Oe.ErrnoError(31);if(!e.stream_ops.write)throw new Oe.ErrnoError(28);e.seekable&&1024&e.flags&&Oe.llseek(e,0,2);var i=void 0!==o;if(i){if(!e.seekable)throw new Oe.ErrnoError(70)}else o=e.position;var s=e.stream_ops.write(e,r,t,n,o,a);return i||(e.position+=s),s},allocate:(e,r,t)=>{if(Oe.isClosed(e))throw new Oe.ErrnoError(8);if(r<0||t<=0)throw new Oe.ErrnoError(28);if(0==(2097155&e.flags))throw new Oe.ErrnoError(8);if(!Oe.isFile(e.node.mode)&&!Oe.isDir(e.node.mode))throw new Oe.ErrnoError(43);if(!e.stream_ops.allocate)throw new Oe.ErrnoError(138);e.stream_ops.allocate(e,r,t)},mmap:(e,r,t,n,o)=>{if(0!=(2&n)&&0==(2&o)&&2!=(2097155&e.flags))throw new Oe.ErrnoError(2);if(1==(2097155&e.flags))throw new Oe.ErrnoError(2);if(!e.stream_ops.mmap)throw new Oe.ErrnoError(43);return e.stream_ops.mmap(e,r,t,n,o)},msync:(e,r,t,n,o)=>e.stream_ops.msync?e.stream_ops.msync(e,r,t,n,o):0,munmap:e=>0,ioctl:(e,r,t)=>{if(!e.stream_ops.ioctl)throw new Oe.ErrnoError(59);return e.stream_ops.ioctl(e,r,t)},readFile:(e,r={})=>{if(r.flags=r.flags||0,r.encoding=r.encoding||"binary","utf8"!==r.encoding&&"binary"!==r.encoding)throw new Error('Invalid encoding type "'+r.encoding+'"');var t,n=Oe.open(e,r.flags),o=Oe.stat(e).size,a=new Uint8Array(o);return Oe.read(n,a,0,o,0),"utf8"===r.encoding?t=$(a,0):"binary"===r.encoding&&(t=a),Oe.close(n),t},writeFile:(e,r,t={})=>{t.flags=t.flags||577;var n=Oe.open(e,t.flags,t.mode);if("string"==typeof r){var o=new Uint8Array(H(r)+1),a=G(r,o,0,o.length);Oe.write(n,o,0,a,void 0,t.canOwn)}else{if(!ArrayBuffer.isView(r))throw new Error("Unsupported data type");Oe.write(n,r,0,r.byteLength,void 0,t.canOwn)}Oe.close(n)},cwd:()=>Oe.currentPath,chdir:e=>{var r=Oe.lookupPath(e,{follow:!0});if(null===r.node)throw new Oe.ErrnoError(44);if(!Oe.isDir(r.node.mode))throw new Oe.ErrnoError(54);var t=Oe.nodePermissions(r.node,"x");if(t)throw new Oe.ErrnoError(t);Oe.currentPath=r.path},createDefaultDirectories:()=>{Oe.mkdir("/tmp"),Oe.mkdir("/home"),Oe.mkdir("/home/web_user")},createDefaultDevices:()=>{Oe.mkdir("/dev"),Oe.registerDevice(Oe.makedev(1,3),{read:()=>0,write:(e,r,t,n,o)=>n}),Oe.mkdev("/dev/null",Oe.makedev(1,3)),Fe.register(Oe.makedev(5,0),Fe.default_tty_ops),Fe.register(Oe.makedev(6,0),Fe.default_tty1_ops),Oe.mkdev("/dev/tty",Oe.makedev(5,0)),Oe.mkdev("/dev/tty1",Oe.makedev(6,0));var e=Se();Oe.createDevice("/dev","random",e),Oe.createDevice("/dev","urandom",e),Oe.mkdir("/dev/shm"),Oe.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{Oe.mkdir("/proc");var e=Oe.mkdir("/proc/self");Oe.mkdir("/proc/self/fd"),Oe.mount({mount:()=>{var r=Oe.createNode(e,"fd",16895,73);return r.node_ops={lookup:(e,r)=>{var t=+r,n=Oe.getStream(t);if(!n)throw new Oe.ErrnoError(8);var o={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>n.path}};return o.parent=o,o}},r}},{},"/proc/self/fd")},createStandardStreams:()=>{o.stdin?Oe.createDevice("/dev","stdin",o.stdin):Oe.symlink("/dev/tty","/dev/stdin"),o.stdout?Oe.createDevice("/dev","stdout",null,o.stdout):Oe.symlink("/dev/tty","/dev/stdout"),o.stderr?Oe.createDevice("/dev","stderr",null,o.stderr):Oe.symlink("/dev/tty1","/dev/stderr");var e=Oe.open("/dev/stdin",0),r=Oe.open("/dev/stdout",1),t=Oe.open("/dev/stderr",1);A(0===e.fd,"invalid handle for stdin ("+e.fd+")"),A(1===r.fd,"invalid handle for stdout ("+r.fd+")"),A(2===t.fd,"invalid handle for stderr ("+t.fd+")")},ensureErrnoError:()=>{Oe.ErrnoError||(Oe.ErrnoError=function(e,r){this.node=r,this.setErrno=function(e){for(var r in this.errno=e,Be)if(Be[r]===e){this.code=r;break}},this.setErrno(e),this.message=De[e],this.stack&&(Object.defineProperty(this,"stack",{value:(new Error).stack,writable:!0}),this.stack=Me(this.stack))},Oe.ErrnoError.prototype=new Error,Oe.ErrnoError.prototype.constructor=Oe.ErrnoError,[44].forEach((e=>{Oe.genericErrors[e]=new Oe.ErrnoError(e),Oe.genericErrors[e].stack=""})))},staticInit:()=>{Oe.ensureErrnoError(),Oe.nameTable=new Array(4096),Oe.mount(Ae,{},"/"),Oe.createDefaultDirectories(),Oe.createDefaultDevices(),Oe.createSpecialDirectories(),Oe.filesystems={MEMFS:Ae}},init:(e,r,t)=>{A(!Oe.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)"),Oe.init.initialized=!0,Oe.ensureErrnoError(),o.stdin=e||o.stdin,o.stdout=r||o.stdout,o.stderr=t||o.stderr,Oe.createStandardStreams()},quit:()=>{Oe.init.initialized=!1,Tn(0);for(var e=0;e{var t=0;return e&&(t|=365),r&&(t|=146),t},findObject:(e,r)=>{var t=Oe.analyzePath(e,r);return t.exists?t.object:null},analyzePath:(e,r)=>{try{e=(n=Oe.lookupPath(e,{follow:!r})).path}catch(e){}var t={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var n=Oe.lookupPath(e,{parent:!0});t.parentExists=!0,t.parentPath=n.path,t.parentObject=n.node,t.name=Te.basename(e),n=Oe.lookupPath(e,{follow:!r}),t.exists=!0,t.path=n.path,t.object=n.node,t.name=n.node.name,t.isRoot="/"===n.path}catch(e){t.error=e.errno}return t},createPath:(e,r,t,n)=>{e="string"==typeof e?e:Oe.getPath(e);for(var o=r.split("/").reverse();o.length;){var a=o.pop();if(a){var i=Te.join2(e,a);try{Oe.mkdir(i)}catch(e){}e=i}}return i},createFile:(e,r,t,n,o)=>{var a=Te.join2("string"==typeof e?e:Oe.getPath(e),r),i=Oe.getMode(n,o);return Oe.create(a,i)},createDataFile:(e,r,t,n,o,a)=>{var i=r;e&&(e="string"==typeof e?e:Oe.getPath(e),i=r?Te.join2(e,r):e);var s=Oe.getMode(n,o),u=Oe.create(i,s);if(t){if("string"==typeof t){for(var c=new Array(t.length),l=0,d=t.length;l{var o=Te.join2("string"==typeof e?e:Oe.getPath(e),r),a=Oe.getMode(!!t,!!n);Oe.createDevice.major||(Oe.createDevice.major=64);var i=Oe.makedev(Oe.createDevice.major++,0);return Oe.registerDevice(i,{open:e=>{e.seekable=!1},close:e=>{n&&n.buffer&&n.buffer.length&&n(10)},read:(e,r,n,o,a)=>{for(var i=0,s=0;s{for(var i=0;i{if(e.isDevice||e.isFolder||e.link||e.contents)return!0;if("undefined"!=typeof XMLHttpRequest)throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");if(!m)throw new Error("Cannot load without read() or XMLHttpRequest.");try{e.contents=ke(m(e.url),!0),e.usedBytes=e.contents.length}catch(e){throw new Oe.ErrnoError(29)}},createLazyFile:(e,r,t,n,o)=>{function a(){this.lengthKnown=!1,this.chunks=[]}if(a.prototype.get=function(e){if(!(e>this.length-1||e<0)){var r=e%this.chunkSize,t=e/this.chunkSize|0;return this.getter(t)[r]}},a.prototype.setDataGetter=function(e){this.getter=e},a.prototype.cacheLength=function(){var e=new XMLHttpRequest;if(e.open("HEAD",t,!1),e.send(null),!(e.status>=200&&e.status<300||304===e.status))throw new Error("Couldn't load "+t+". Status: "+e.status);var r,n=Number(e.getResponseHeader("Content-length")),o=(r=e.getResponseHeader("Accept-Ranges"))&&"bytes"===r,a=(r=e.getResponseHeader("Content-Encoding"))&&"gzip"===r,i=1048576;o||(i=n);var s=this;s.setDataGetter((e=>{var r=e*i,o=(e+1)*i-1;if(o=Math.min(o,n-1),void 0===s.chunks[e]&&(s.chunks[e]=((e,r)=>{if(e>r)throw new Error("invalid range ("+e+", "+r+") or no bytes requested!");if(r>n-1)throw new Error("only "+n+" bytes available! programmer error!");var o=new XMLHttpRequest;if(o.open("GET",t,!1),n!==i&&o.setRequestHeader("Range","bytes="+e+"-"+r),o.responseType="arraybuffer",o.overrideMimeType&&o.overrideMimeType("text/plain; charset=x-user-defined"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error("Couldn't load "+t+". Status: "+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):ke(o.responseText||"",!0)})(r,o)),void 0===s.chunks[e])throw new Error("doXHR failed!");return s.chunks[e]})),!a&&n||(i=n=1,n=this.getter(0).length,i=n,_("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=n,this._chunkSize=i,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!l)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var i=new a;Object.defineProperties(i,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var s={isDevice:!1,contents:i}}else s={isDevice:!1,url:t};var u=Oe.createFile(e,r,s,n,o);s.contents?u.contents=s.contents:s.url&&(u.contents=null,u.url=s.url),Object.defineProperties(u,{usedBytes:{get:function(){return this.contents.length}}});var c={};function d(e,r,t,n,o){var a=e.node.contents;if(o>=a.length)return 0;var i=Math.min(a.length-o,n);if(A(i>=0),a.slice)for(var s=0;s{var r=u.stream_ops[e];c[e]=function(){return Oe.forceLoadFile(u),r.apply(null,arguments)}})),c.read=(e,r,t,n,o)=>(Oe.forceLoadFile(u),d(e,r,t,n,o)),c.mmap=(e,r,t,n,o)=>{Oe.forceLoadFile(u);var a=Le(r);if(!a)throw new Oe.ErrnoError(48);return d(e,B,a,r,t),{ptr:a,allocated:!0}},u.stream_ops=c,u},createPreloadedFile:(e,r,t,n,o,a,i,s,u,c)=>{var l=r?Pe.resolve(Te.join2(e,r)):e,d=ue("cp "+l);function f(t){function f(t){c&&c(),s||Oe.createDataFile(e,r,t,n,o,u),a&&a(),le(d)}$e.handledByPreloadPlugin(t,l,f,(()=>{i&&i(),le(d)}))||f(t)}ce(d),"string"==typeof t?function(e,r,t,n){var o=n?"":ue("al "+e);p(e,(t=>{A(t,'Loading data file "'+e+'" failed (no arrayBuffer).'),r(new Uint8Array(t)),o&&le(o)}),(r=>{if(!t)throw'Loading data file "'+e+'" failed.';t()})),o&&ce(o)}(t,(e=>f(e)),i):f(t)},indexedDB:()=>window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,DB_NAME:()=>"EM_FS_"+window.location.pathname,DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(e,r,t)=>{r=r||(()=>{}),t=t||(()=>{});var n=Oe.indexedDB();try{var o=n.open(Oe.DB_NAME(),Oe.DB_VERSION)}catch(e){return t(e)}o.onupgradeneeded=()=>{_("creating db"),o.result.createObjectStore(Oe.DB_STORE_NAME)},o.onsuccess=()=>{var n=o.result.transaction([Oe.DB_STORE_NAME],"readwrite"),a=n.objectStore(Oe.DB_STORE_NAME),i=0,s=0,u=e.length;function c(){0==s?r():t()}e.forEach((e=>{var r=a.put(Oe.analyzePath(e).object.contents,e);r.onsuccess=()=>{++i+s==u&&c()},r.onerror=()=>{s++,i+s==u&&c()}})),n.onerror=t},o.onerror=t},loadFilesFromDB:(e,r,t)=>{r=r||(()=>{}),t=t||(()=>{});var n=Oe.indexedDB();try{var o=n.open(Oe.DB_NAME(),Oe.DB_VERSION)}catch(e){return t(e)}o.onupgradeneeded=t,o.onsuccess=()=>{var n=o.result;try{var a=n.transaction([Oe.DB_STORE_NAME],"readonly")}catch(e){return void t(e)}var i=a.objectStore(Oe.DB_STORE_NAME),s=0,u=0,c=e.length;function l(){0==u?r():t()}e.forEach((e=>{var r=i.get(e);r.onsuccess=()=>{Oe.analyzePath(e).exists&&Oe.unlink(e),Oe.createDataFile(Te.dirname(e),Te.basename(e),r.result,!0,!0,!0),++s+u==c&&l()},r.onerror=()=>{u++,s+u==c&&l()}})),a.onerror=t},o.onerror=t},absolutePath:()=>{de("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder:()=>{de("FS.createFolder has been removed; use FS.mkdir instead")},createLink:()=>{de("FS.createLink has been removed; use FS.symlink instead")},joinPath:()=>{de("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc:()=>{de("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath:()=>{de("FS.standardizePath has been removed; use PATH.normalize instead")}},Re={DEFAULT_POLLMASK:5,calculateAt:function(e,r,t){if(Te.isAbs(r))return r;var n;-100===e?n=Oe.cwd():n=Re.getStreamFromFD(e).path;if(0==r.length){if(!t)throw new Oe.ErrnoError(44);return n}return Te.join2(n,r)},doStat:function(e,r,t){try{var n=e(r)}catch(e){if(e&&e.node&&Te.normalize(r)!==Te.normalize(Oe.getPath(e.node)))return-54;throw e}return I[t>>2]=n.dev,I[t+8>>2]=n.ino,I[t+12>>2]=n.mode,N[t+16>>2]=n.nlink,I[t+20>>2]=n.uid,I[t+24>>2]=n.gid,I[t+28>>2]=n.rdev,ge=[n.size>>>0,(pe=n.size,+Math.abs(pe)>=1?pe>0?(0|Math.min(+Math.floor(pe/4294967296),4294967295))>>>0:~~+Math.ceil((pe-+(~~pe>>>0))/4294967296)>>>0:0)],I[t+40>>2]=ge[0],I[t+44>>2]=ge[1],I[t+48>>2]=4096,I[t+52>>2]=n.blocks,ge=[Math.floor(n.atime.getTime()/1e3)>>>0,(pe=Math.floor(n.atime.getTime()/1e3),+Math.abs(pe)>=1?pe>0?(0|Math.min(+Math.floor(pe/4294967296),4294967295))>>>0:~~+Math.ceil((pe-+(~~pe>>>0))/4294967296)>>>0:0)],I[t+56>>2]=ge[0],I[t+60>>2]=ge[1],N[t+64>>2]=0,ge=[Math.floor(n.mtime.getTime()/1e3)>>>0,(pe=Math.floor(n.mtime.getTime()/1e3),+Math.abs(pe)>=1?pe>0?(0|Math.min(+Math.floor(pe/4294967296),4294967295))>>>0:~~+Math.ceil((pe-+(~~pe>>>0))/4294967296)>>>0:0)],I[t+72>>2]=ge[0],I[t+76>>2]=ge[1],N[t+80>>2]=0,ge=[Math.floor(n.ctime.getTime()/1e3)>>>0,(pe=Math.floor(n.ctime.getTime()/1e3),+Math.abs(pe)>=1?pe>0?(0|Math.min(+Math.floor(pe/4294967296),4294967295))>>>0:~~+Math.ceil((pe-+(~~pe>>>0))/4294967296)>>>0:0)],I[t+88>>2]=ge[0],I[t+92>>2]=ge[1],N[t+96>>2]=0,ge=[n.ino>>>0,(pe=n.ino,+Math.abs(pe)>=1?pe>0?(0|Math.min(+Math.floor(pe/4294967296),4294967295))>>>0:~~+Math.ceil((pe-+(~~pe>>>0))/4294967296)>>>0:0)],I[t+104>>2]=ge[0],I[t+108>>2]=ge[1],0},doMsync:function(e,r,t,n,o){if(!Oe.isFile(r.node.mode))throw new Oe.ErrnoError(43);if(2&n)return 0;var a=M.slice(e,e+t);Oe.msync(r,a,o,t,n)},varargs:void 0,get:function(){return A(null!=Re.varargs),Re.varargs+=4,I[Re.varargs-4>>2]},getStr:function(e){return z(e)},getStreamFromFD:function(e){var r=Oe.getStream(e);if(!r)throw new Oe.ErrnoError(8);return r}};function Ie(e){F=e,ne()||(o.onExit&&o.onExit(e),L=!0),u(e,new Ce(e))}var Ne=function(e,r){if(F=e,function(){var e=_,r=E,t=!1;_=E=e=>{t=!0};try{Tn(0),["stdout","stderr"].forEach((function(e){var r=Oe.analyzePath("/dev/"+e);if(r){var n=r.object.rdev,o=Fe.ttys[n];o&&o.output&&o.output.length&&(t=!0)}}))}catch(e){}_=e,E=r,t&&Ve("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.")}(),ne()&&!r){var t="program exited (with status: "+e+"), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)";n(t),E(t)}Ie(e)};function je(e){if(L)E("user callback triggered after runtime exited or application aborted. Ignoring.");else try{e()}catch(e){!function(e){if(e instanceof Ce||"unwind"==e)return F;K(),e instanceof WebAssembly.RuntimeError&&Ln()<=0&&E("Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to "+Y+")"),u(1,e)}(e)}}function Ue(e,r){return setTimeout((function(){je(e)}),r)}function Ve(e){Ve.shown||(Ve.shown={}),Ve.shown[e]||(Ve.shown[e]=1,d&&(e="warning: "+e),E(e))}var $e={mainLoop:{running:!1,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){$e.mainLoop.scheduler=null,$e.mainLoop.currentlyRunningMainloop++},resume:function(){$e.mainLoop.currentlyRunningMainloop++;var e=$e.mainLoop.timingMode,r=$e.mainLoop.timingValue,t=$e.mainLoop.func;$e.mainLoop.func=null,function(e,r,t,n,a){A(!$e.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),$e.mainLoop.func=e,$e.mainLoop.arg=n;var i=$e.mainLoop.currentlyRunningMainloop;function s(){return!(i<$e.mainLoop.currentlyRunningMainloop)}if($e.mainLoop.running=!1,$e.mainLoop.runner=function(){if(!L)if($e.mainLoop.queue.length>0){var r=Date.now(),t=$e.mainLoop.queue.shift();if(t.func(t.arg),$e.mainLoop.remainingBlockers){var n=$e.mainLoop.remainingBlockers,a=n%1==0?n-1:Math.floor(n);t.counted?$e.mainLoop.remainingBlockers=a:(a+=.5,$e.mainLoop.remainingBlockers=(8*n+a)/9)}if(_('main loop blocker "'+t.name+'" took '+(Date.now()-r)+" ms"),$e.mainLoop.updateStatus(),!s())return;setTimeout($e.mainLoop.runner,0)}else s()&&($e.mainLoop.currentFrameNumber=$e.mainLoop.currentFrameNumber+1|0,1==$e.mainLoop.timingMode&&$e.mainLoop.timingValue>1&&$e.mainLoop.currentFrameNumber%$e.mainLoop.timingValue!=0?$e.mainLoop.scheduler():(0==$e.mainLoop.timingMode&&($e.mainLoop.tickStartTime=_e()),Ut.newRenderingFrameStarted(),void 0!==Ut&&Ut.currentContext&&!Ut.currentContextIsProxied&&!Ut.currentContext.attributes.explicitSwapControl&&Ut.currentContext.GLctx.commit&&Ut.currentContext.GLctx.commit(),"timeout"===$e.mainLoop.method&&o.ctx&&(Ve("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),$e.mainLoop.method=""),$e.mainLoop.runIter(e),K(),s()&&("object"==typeof SDL&&SDL.audio&&SDL.audio.queueNewAudioData&&SDL.audio.queueNewAudioData(),$e.mainLoop.scheduler())))},a||(r&&r>0?xe(0,1e3/r):xe(1,1),$e.mainLoop.scheduler()),t)throw"unwind"}(t,0,!1,$e.mainLoop.arg,!0),xe(e,r),$e.mainLoop.scheduler()},updateStatus:function(){if(o.setStatus){var e=o.statusMessage||"Please wait...",r=$e.mainLoop.remainingBlockers,t=$e.mainLoop.expectedBlockers;r?r{A(s.complete,"Image "+r+" could not be decoded");var n=document.createElement("canvas");n.width=s.width,n.height=s.height,n.getContext("2d").drawImage(s,0,0),mn[r]=n,$e.URLObject.revokeObjectURL(i),t&&t(e)},s.onerror=e=>{_("Image "+i+" could not be decoded"),n&&n()},s.src=i}};o.preloadPlugins.push(e);var r={canHandle:function(e){return!o.noAudioDecoding&&e.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},handle:function(e,r,t,n){var o=!1;function a(n){o||(o=!0,pn[r]=n,t&&t(e))}function i(){o||(o=!0,pn[r]=new Audio,n&&n())}if(!$e.hasBlobConstructor)return i();try{var s=new Blob([e],{type:$e.getMimetype(r)})}catch(e){return i()}var u=$e.URLObject.createObjectURL(s);A("string"==typeof u,"createObjectURL must return a url as a string");var c=new Audio;c.addEventListener("canplaythrough",(()=>a(c)),!1),c.onerror=function(t){o||(E("warning: browser could not fully decode audio "+r+", trying slower base64 approach"),c.src="data:audio/x-"+r.substr(-3)+";base64,"+function(e){for(var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t="",n=0,o=0,a=0;a=6;){var i=n>>o-6&63;o-=6,t+=r[i]}return 2==o?(t+=r[(3&n)<<4],t+="=="):4==o&&(t+=r[(15&n)<<2],t+="="),t}(e),a(c))},c.src=u,Ue((function(){a(c)}),1e4)}};o.preloadPlugins.push(r);var t=o.canvas;t&&(t.requestPointerLock=t.requestPointerLock||t.mozRequestPointerLock||t.webkitRequestPointerLock||t.msRequestPointerLock||(()=>{}),t.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||(()=>{}),t.exitPointerLock=t.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",n,!1),document.addEventListener("mozpointerlockchange",n,!1),document.addEventListener("webkitpointerlockchange",n,!1),document.addEventListener("mspointerlockchange",n,!1),o.elementPointerLock&&t.addEventListener("click",(e=>{!$e.pointerLock&&o.canvas.requestPointerLock&&(o.canvas.requestPointerLock(),e.preventDefault())}),!1))}function n(){$e.pointerLock=document.pointerLockElement===o.canvas||document.mozPointerLockElement===o.canvas||document.webkitPointerLockElement===o.canvas||document.msPointerLockElement===o.canvas}},handledByPreloadPlugin:function(e,r,t,n){$e.init();var a=!1;return o.preloadPlugins.forEach((function(o){a||o.canHandle(r)&&(o.handle(e,r,t,n),a=!0)})),a},createContext:function(e,r,t,n){if(r&&o.ctx&&e==o.canvas)return o.ctx;var a,i;if(r){var s={antialias:!1,alpha:!1,majorVersion:"undefined"!=typeof WebGL2RenderingContext?2:1};if(n)for(var u in n)s[u]=n[u];void 0!==Ut&&(i=Ut.createContext(e,s))&&(a=Ut.getContext(i).GLctx)}else a=e.getContext("2d");return a?(t&&(r||A(void 0===fn,"cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),o.ctx=a,r&&Ut.makeContextCurrent(i),o.useWebGL=r,$e.moduleContextCreatedCallbacks.forEach((function(e){e()})),$e.init()),a):null},destroyContext:function(e,r,t){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(e,r){$e.lockPointer=e,$e.resizeCanvas=r,void 0===$e.lockPointer&&($e.lockPointer=!0),void 0===$e.resizeCanvas&&($e.resizeCanvas=!1);var t=o.canvas;function n(){$e.isFullscreen=!1;var e=t.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===e?(t.exitFullscreen=$e.exitFullscreen,$e.lockPointer&&t.requestPointerLock(),$e.isFullscreen=!0,$e.resizeCanvas?$e.setFullscreenCanvasSize():$e.updateCanvasDimensions(t)):(e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e),$e.resizeCanvas?$e.setWindowedCanvasSize():$e.updateCanvasDimensions(t)),o.onFullScreen&&o.onFullScreen($e.isFullscreen),o.onFullscreen&&o.onFullscreen($e.isFullscreen)}$e.fullscreenHandlersInstalled||($e.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",n,!1),document.addEventListener("mozfullscreenchange",n,!1),document.addEventListener("webkitfullscreenchange",n,!1),document.addEventListener("MSFullscreenChange",n,!1));var a=document.createElement("div");t.parentNode.insertBefore(a,t),a.appendChild(t),a.requestFullscreen=a.requestFullscreen||a.mozRequestFullScreen||a.msRequestFullscreen||(a.webkitRequestFullscreen?()=>a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):null)||(a.webkitRequestFullScreen?()=>a.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT):null),a.requestFullscreen()},requestFullScreen:function(){de("Module.requestFullScreen has been replaced by Module.requestFullscreen (without a capital S)")},exitFullscreen:function(){return!!$e.isFullscreen&&((document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){}).apply(document,[]),!0)},nextRAF:0,fakeRequestAnimationFrame:function(e){var r=Date.now();if(0===$e.nextRAF)$e.nextRAF=r+1e3/60;else for(;r+2>=$e.nextRAF;)$e.nextRAF+=1e3/60;var t=Math.max($e.nextRAF-r,0);setTimeout(e,t)},requestAnimationFrame:function(e){"function"!=typeof requestAnimationFrame?(0,$e.fakeRequestAnimationFrame)(e):requestAnimationFrame(e)},safeSetTimeout:function(e,r){return Ue(e,r)},safeRequestAnimationFrame:function(e){return $e.requestAnimationFrame((function(){je(e)}))},getMimetype:function(e){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[e.substr(e.lastIndexOf(".")+1)]},getUserMedia:function(e){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(e)},getMovementX:function(e){return e.movementX||e.mozMovementX||e.webkitMovementX||0},getMovementY:function(e){return e.movementY||e.mozMovementY||e.webkitMovementY||0},getMouseWheelDelta:function(e){var r=0;switch(e.type){case"DOMMouseScroll":r=e.detail/3;break;case"mousewheel":r=e.wheelDelta/120;break;case"wheel":switch(r=e.deltaY,e.deltaMode){case 0:r/=100;break;case 1:r/=3;break;case 2:r*=80;break;default:throw"unrecognized mouse wheel delta mode: "+e.deltaMode}break;default:throw"unrecognized mouse wheel event: "+e.type}return r},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(e){if($e.pointerLock)"mousemove"!=e.type&&"mozMovementX"in e?$e.mouseMovementX=$e.mouseMovementY=0:($e.mouseMovementX=$e.getMovementX(e),$e.mouseMovementY=$e.getMovementY(e)),"undefined"!=typeof SDL?($e.mouseX=SDL.mouseX+$e.mouseMovementX,$e.mouseY=SDL.mouseY+$e.mouseMovementY):($e.mouseX+=$e.mouseMovementX,$e.mouseY+=$e.mouseMovementY);else{var r=o.canvas.getBoundingClientRect(),t=o.canvas.width,n=o.canvas.height,a=void 0!==window.scrollX?window.scrollX:window.pageXOffset,i=void 0!==window.scrollY?window.scrollY:window.pageYOffset;if(A(void 0!==a&&void 0!==i,"Unable to retrieve scroll position, mouse positions likely broken."),"touchstart"===e.type||"touchend"===e.type||"touchmove"===e.type){var s=e.touch;if(void 0===s)return;var u=s.pageX-(a+r.left),c=s.pageY-(i+r.top),l={x:u*=t/r.width,y:c*=n/r.height};if("touchstart"===e.type)$e.lastTouches[s.identifier]=l,$e.touches[s.identifier]=l;else if("touchend"===e.type||"touchmove"===e.type){var d=$e.touches[s.identifier];d||(d=l),$e.lastTouches[s.identifier]=d,$e.touches[s.identifier]=l}return}var f=e.pageX-(a+r.left),m=e.pageY-(i+r.top);f*=t/r.width,m*=n/r.height,$e.mouseMovementX=f-$e.mouseX,$e.mouseMovementY=m-$e.mouseY,$e.mouseX=f,$e.mouseY=m}},resizeListeners:[],updateResizeListeners:function(){var e=o.canvas;$e.resizeListeners.forEach((function(r){r(e.width,e.height)}))},setCanvasSize:function(e,r,t){var n=o.canvas;$e.updateCanvasDimensions(n,e,r),t||$e.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if("undefined"!=typeof SDL){var e=N[SDL.screen>>2];e|=8388608,I[SDL.screen>>2]=e}$e.updateCanvasDimensions(o.canvas),$e.updateResizeListeners()},setWindowedCanvasSize:function(){if("undefined"!=typeof SDL){var e=N[SDL.screen>>2];e&=-8388609,I[SDL.screen>>2]=e}$e.updateCanvasDimensions(o.canvas),$e.updateResizeListeners()},updateCanvasDimensions:function(e,r,t){r&&t?(e.widthNative=r,e.heightNative=t):(r=e.widthNative,t=e.heightNative);var n=r,a=t;if(o.forcedAspectRatio&&o.forcedAspectRatio>0&&(n/a0;)e.shift()(o)}function Ge(e){return"0x"+e.toString(16).padStart(8,"0")}function We(e){this.excPtr=e,this.ptr=e-24,this.set_type=function(e){N[this.ptr+4>>2]=e},this.get_type=function(){return N[this.ptr+4>>2]},this.set_destructor=function(e){N[this.ptr+8>>2]=e},this.get_destructor=function(){return N[this.ptr+8>>2]},this.set_refcount=function(e){I[this.ptr>>2]=e},this.set_caught=function(e){e=e?1:0,B[this.ptr+12>>0]=e},this.get_caught=function(){return 0!=B[this.ptr+12>>0]},this.set_rethrown=function(e){e=e?1:0,B[this.ptr+13>>0]=e},this.get_rethrown=function(){return 0!=B[this.ptr+13>>0]},this.init=function(e,r){this.set_adjusted_ptr(0),this.set_type(e),this.set_destructor(r),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var e=I[this.ptr>>2];I[this.ptr>>2]=e+1},this.release_ref=function(){var e=I[this.ptr>>2];return I[this.ptr>>2]=e-1,A(e>0),1===e},this.set_adjusted_ptr=function(e){N[this.ptr+16>>2]=e},this.get_adjusted_ptr=function(){return N[this.ptr+16>>2]},this.get_exception_ptr=function(){if(An(this.get_type()))return N[this.excPtr>>2];var e=this.get_adjusted_ptr();return 0!==e?e:this.excPtr}}var He="To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking";var qe=48,Ye=57;function Xe(e){if(void 0===e)return"_unknown";var r=(e=e.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return r>=qe&&r<=Ye?"_"+e:e}function Qe(e,r){return e=Xe(e),function(){"use strict";return r.apply(this,arguments)}}var Ke=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Je=[];function Ze(e,r){var t=Qe(r,(function(e){this.name=r,this.message=e;var t=new Error(e).stack;void 0!==t&&(this.stack=this.toString()+"\n"+t.replace(/^Error(:[^\n]*)?\n/,""))}));return t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message},t}var er=void 0;function rr(e){throw new er(e)}function tr(){for(var e=0,r=5;r(e||rr("Cannot use deleted val. handle = "+e),Ke[e].value),toHandle:e=>{switch(e){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var r=Je.length?Je.pop():Ke.length;return Ke[r]={refcount:1,value:e},r}}},ar=void 0;var ir=void 0;function sr(e){for(var r="",t=e;M[t];)r+=ir[M[t++]];return r}function ur(){return Object.keys(pr).length}function cr(){var e=[];for(var r in pr)pr.hasOwnProperty(r)&&e.push(pr[r]);return e}var lr=[];function dr(){for(;lr.length;){var e=lr.pop();e.$$.deleteScheduled=!1,e.delete()}}var fr=void 0;function mr(e){fr=e,lr.length&&fr&&fr(dr)}var pr={};function gr(e,r){for(void 0===r&&rr("ptr should not be undefined");e.baseClass;)r=e.upcast(r),e=e.baseClass;return r}var vr={};function hr(e){var r=Sn(e),t=sr(r);return xn(r),t}function yr(e,r){var t=vr[e];return void 0===t&&rr(r+" has unknown type "+hr(e)),t}function br(e){}var wr=!1;function _r(e){e.count.value-=1,0===e.count.value&&function(e){e.smartPtr?e.smartPtrType.rawDestructor(e.smartPtr):e.ptrType.registeredClass.rawDestructor(e.ptr)}(e)}function Er(e,r,t){if(r===t)return e;if(void 0===t.baseClass)return null;var n=Er(e,r,t.baseClass);return null===n?null:t.downcast(n)}var xr={};var Cr=void 0;function Tr(e){throw new Cr(e)}function Sr(e,r){return r.ptrType&&r.ptr||Tr("makeClassHandle requires ptr and ptrType"),!!r.smartPtrType!==!!r.smartPtr&&Tr("Both smartPtrType and smartPtr must be specified"),r.count={value:1},kr(Object.create(e,{$$:{value:r}}))}function Pr(e){var r=this.getPointee(e);if(!r)return this.destructor(e),null;var t=function(e,r){return r=gr(e,r),pr[r]}(this.registeredClass,r);if(void 0!==t){if(0===t.$$.count.value)return t.$$.ptr=r,t.$$.smartPtr=e,t.clone();var n=t.clone();return this.destructor(e),n}function o(){return this.isSmartPointer?Sr(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:r,smartPtrType:this,smartPtr:e}):Sr(this.registeredClass.instancePrototype,{ptrType:this,ptr:e})}var a,i=this.registeredClass.getActualType(r),s=xr[i];if(!s)return o.call(this);a=this.isConst?s.constPointerType:s.pointerType;var u=Er(r,this.registeredClass,a.registeredClass);return null===u?o.call(this):this.isSmartPointer?Sr(a.registeredClass.instancePrototype,{ptrType:a,ptr:u,smartPtrType:this,smartPtr:e}):Sr(a.registeredClass.instancePrototype,{ptrType:a,ptr:u})}function kr(e){return"undefined"==typeof FinalizationRegistry?(kr=e=>e,e):(wr=new FinalizationRegistry((e=>{console.warn(e.leakWarning.stack.replace(/^Error: /,"")),_r(e.$$)})),kr=e=>{var r=e.$$;if(!!r.smartPtr){var t={$$:r},n=r.ptrType.registeredClass;t.leakWarning=new Error("Embind found a leaked C++ instance "+n.name+" <"+Ge(r.ptr)+">.\nWe'll free it automatically in this case, but this functionality is not reliable across various environments.\nMake sure to invoke .delete() manually once you're done with the instance instead.\nOriginally allocated"),"captureStackTrace"in Error&&Error.captureStackTrace(t.leakWarning,Pr),wr.register(e,t,e)}return e},br=e=>wr.unregister(e),kr(e))}var Fr={};function Lr(e){for(;e.length;){var r=e.pop();e.pop()(r)}}function Ar(e){return this.fromWireType(I[e>>2])}var Dr={},Br={};function Mr(e,r,t){function n(r){var n=t(r);n.length!==e.length&&Tr("Mismatched type converter count");for(var o=0;o{vr.hasOwnProperty(e)?o[r]=vr[e]:(a.push(e),Dr.hasOwnProperty(e)||(Dr[e]=[]),Dr[e].push((()=>{o[r]=vr[e],++i===a.length&&n(o)})))})),0===a.length&&n(o)}function Or(e){switch(e){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+e)}}function Rr(e,r,t={}){if(!("argPackAdvance"in r))throw new TypeError("registerType registeredInstance requires argPackAdvance");var n=r.name;if(e||rr('type "'+n+'" must have a positive integer typeid pointer'),vr.hasOwnProperty(e)){if(t.ignoreDuplicateRegistrations)return;rr("Cannot register type '"+n+"' twice")}if(vr[e]=r,delete Br[e],Dr.hasOwnProperty(e)){var o=Dr[e];delete Dr[e],o.forEach((e=>e()))}}function Ir(e){if(!(this instanceof zr))return!1;if(!(e instanceof zr))return!1;for(var r=this.$$.ptrType.registeredClass,t=this.$$.ptr,n=e.$$.ptrType.registeredClass,o=e.$$.ptr;r.baseClass;)t=r.upcast(t),r=r.baseClass;for(;n.baseClass;)o=n.upcast(o),n=n.baseClass;return r===n&&t===o}function Nr(e){rr(e.$$.ptrType.registeredClass.name+" instance already deleted")}function jr(){if(this.$$.ptr||Nr(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var e,r=kr(Object.create(Object.getPrototypeOf(this),{$$:{value:(e=this.$$,{count:e.count,deleteScheduled:e.deleteScheduled,preservePointerOnDelete:e.preservePointerOnDelete,ptr:e.ptr,ptrType:e.ptrType,smartPtr:e.smartPtr,smartPtrType:e.smartPtrType})}}));return r.$$.count.value+=1,r.$$.deleteScheduled=!1,r}function Ur(){this.$$.ptr||Nr(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&rr("Object already scheduled for deletion"),br(this),_r(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)}function Vr(){return!this.$$.ptr}function $r(){return this.$$.ptr||Nr(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&rr("Object already scheduled for deletion"),lr.push(this),1===lr.length&&fr&&fr(dr),this.$$.deleteScheduled=!0,this}function zr(){}function Gr(e,r,t){if(void 0===e[r].overloadTable){var n=e[r];e[r]=function(){return e[r].overloadTable.hasOwnProperty(arguments.length)||rr("Function '"+t+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+e[r].overloadTable+")!"),e[r].overloadTable[arguments.length].apply(this,arguments)},e[r].overloadTable=[],e[r].overloadTable[n.argCount]=n}}function Wr(e,r,t){o.hasOwnProperty(e)?((void 0===t||void 0!==o[e].overloadTable&&void 0!==o[e].overloadTable[t])&&rr("Cannot register public name '"+e+"' twice"),Gr(o,e,e),o.hasOwnProperty(t)&&rr("Cannot register multiple overloads of a function with the same number of arguments ("+t+")!"),o[e].overloadTable[t]=r):(o[e]=r,void 0!==t&&(o[e].numArguments=t))}function Hr(e,r,t,n,o,a,i,s){this.name=e,this.constructor=r,this.instancePrototype=t,this.rawDestructor=n,this.baseClass=o,this.getActualType=a,this.upcast=i,this.downcast=s,this.pureVirtualFunctions=[]}function qr(e,r,t){for(;r!==t;)r.upcast||rr("Expected null or instance of "+t.name+", got an instance of "+r.name),e=r.upcast(e),r=r.baseClass;return e}function Yr(e,r){if(null===r)return this.isReference&&rr("null is not a valid "+this.name),0;r.$$||rr('Cannot pass "'+ft(r)+'" as a '+this.name),r.$$.ptr||rr("Cannot pass deleted object as a pointer of type "+this.name);var t=r.$$.ptrType.registeredClass;return qr(r.$$.ptr,t,this.registeredClass)}function Xr(e,r){var t;if(null===r)return this.isReference&&rr("null is not a valid "+this.name),this.isSmartPointer?(t=this.rawConstructor(),null!==e&&e.push(this.rawDestructor,t),t):0;r.$$||rr('Cannot pass "'+ft(r)+'" as a '+this.name),r.$$.ptr||rr("Cannot pass deleted object as a pointer of type "+this.name),!this.isConst&&r.$$.ptrType.isConst&&rr("Cannot convert argument of type "+(r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name)+" to parameter type "+this.name);var n=r.$$.ptrType.registeredClass;if(t=qr(r.$$.ptr,n,this.registeredClass),this.isSmartPointer)switch(void 0===r.$$.smartPtr&&rr("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:r.$$.smartPtrType===this?t=r.$$.smartPtr:rr("Cannot convert argument of type "+(r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name)+" to parameter type "+this.name);break;case 1:t=r.$$.smartPtr;break;case 2:if(r.$$.smartPtrType===this)t=r.$$.smartPtr;else{var o=r.clone();t=this.rawShare(t,or.toHandle((function(){o.delete()}))),null!==e&&e.push(this.rawDestructor,t)}break;default:rr("Unsupporting sharing policy")}return t}function Qr(e,r){if(null===r)return this.isReference&&rr("null is not a valid "+this.name),0;r.$$||rr('Cannot pass "'+ft(r)+'" as a '+this.name),r.$$.ptr||rr("Cannot pass deleted object as a pointer of type "+this.name),r.$$.ptrType.isConst&&rr("Cannot convert argument of type "+r.$$.ptrType.name+" to parameter type "+this.name);var t=r.$$.ptrType.registeredClass;return qr(r.$$.ptr,t,this.registeredClass)}function Kr(e){return this.rawGetPointee&&(e=this.rawGetPointee(e)),e}function Jr(e){this.rawDestructor&&this.rawDestructor(e)}function Zr(e){null!==e&&e.delete()}function et(e,r,t,n,o,a,i,s,u,c,l){this.name=e,this.registeredClass=r,this.isReference=t,this.isConst=n,this.isSmartPointer=o,this.pointeeType=a,this.sharingPolicy=i,this.rawGetPointee=s,this.rawConstructor=u,this.rawShare=c,this.rawDestructor=l,o||void 0!==r.baseClass?this.toWireType=Xr:n?(this.toWireType=Yr,this.destructorFunction=null):(this.toWireType=Qr,this.destructorFunction=null)}function rt(e,r,t){o.hasOwnProperty(e)||Tr("Replacing nonexistant public symbol"),void 0!==o[e].overloadTable&&void 0!==t?o[e].overloadTable[t]=r:(o[e]=r,o[e].argCount=t)}var tt=[];function nt(e){var r=tt[e];return r||(e>=tt.length&&(tt.length=e+1),tt[e]=r=X.get(e)),A(X.get(e)==r,"JavaScript-side Wasm function table mirror is out of date!"),r}function ot(e,r,t){return e.includes("j")?function(e,r,t){A("dynCall_"+e in o,"bad function pointer type - dynCall function not found for sig '"+e+"'"),t&&t.length?A(t.length===e.substring(1).replace(/j/g,"--").length):A(1==e.length);var n=o["dynCall_"+e];return t&&t.length?n.apply(null,[r].concat(t)):n.call(null,r)}(e,r,t):(A(nt(r),"missing table entry in dynCall: "+r),nt(r).apply(null,t))}function at(e,r){var t=(e=sr(e)).includes("j")?function(e,r){A(e.includes("j")||e.includes("p"),"getDynCaller should only be called with i64 sigs");var t=[];return function(){return t.length=0,Object.assign(t,arguments),ot(e,r,t)}}(e,r):nt(r);return"function"!=typeof t&&rr("unknown function pointer with signature "+e+": "+r),t}var it=void 0;function st(e,r){var t=[],n={};throw r.forEach((function e(r){n[r]||vr[r]||(Br[r]?Br[r].forEach(e):(t.push(r),n[r]=!0))})),new it(e+": "+t.map(hr).join([", "]))}function ut(e,r,t,n,o){var a=r.length;a<2&&rr("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var i=null!==r[1]&&null!==t,s=!1,u=1;u>2]);return t}function lt(e,r,t){return e instanceof Object||rr(t+' with invalid "this": '+e),e instanceof r.registeredClass.constructor||rr(t+' incompatible with "this" of type '+e.constructor.name),e.$$.ptr||rr("cannot call emscripten binding method "+t+" on deleted object"),qr(e.$$.ptr,e.$$.ptrType.registeredClass,r.registeredClass)}function dt(e){e>4&&0==--Ke[e].refcount&&(Ke[e]=void 0,Je.push(e))}function ft(e){if(null===e)return"null";var r=typeof e;return"object"===r||"array"===r||"function"===r?e.toString():""+e}function mt(e,r){switch(r){case 2:return function(e){return this.fromWireType(j[e>>2])};case 3:return function(e){return this.fromWireType(U[e>>3])};default:throw new TypeError("Unknown float type: "+e)}}function pt(e,r,t){switch(r){case 0:return t?function(e){return B[e]}:function(e){return M[e]};case 1:return t?function(e){return O[e>>1]}:function(e){return R[e>>1]};case 2:return t?function(e){return I[e>>2]}:function(e){return N[e>>2]};default:throw new TypeError("Unknown integer type: "+e)}}var gt="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;function vt(e,r){A(e%2==0,"Pointer passed to UTF16ToString must be aligned to two bytes!");for(var t=e,n=t>>1,o=n+r/2;!(n>=o)&&R[n];)++n;if((t=n<<1)-e>32&>)return gt.decode(M.subarray(e,t));for(var a="",i=0;!(i>=r/2);++i){var s=O[e+2*i>>1];if(0==s)break;a+=String.fromCharCode(s)}return a}function ht(e,r,t){if(A(r%2==0,"Pointer passed to stringToUTF16 must be aligned to two bytes!"),A("number"==typeof t,"stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),void 0===t&&(t=2147483647),t<2)return 0;for(var n=r,o=(t-=2)<2*e.length?t/2:e.length,a=0;a>1]=i,r+=2}return O[r>>1]=0,r-n}function yt(e){return 2*e.length}function bt(e,r){A(e%4==0,"Pointer passed to UTF32ToString must be aligned to four bytes!");for(var t=0,n="";!(t>=r/4);){var o=I[e+4*t>>2];if(0==o)break;if(++t,o>=65536){var a=o-65536;n+=String.fromCharCode(55296|a>>10,56320|1023&a)}else n+=String.fromCharCode(o)}return n}function wt(e,r,t){if(A(r%4==0,"Pointer passed to stringToUTF32 must be aligned to four bytes!"),A("number"==typeof t,"stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),void 0===t&&(t=2147483647),t<4)return 0;for(var n=r,o=n+t-4,a=0;a=55296&&i<=57343)i=65536+((1023&i)<<10)|1023&e.charCodeAt(++a);if(I[r>>2]=i,(r+=4)+4>o)break}return I[r>>2]=0,r-n}function _t(e){for(var r=0,t=0;t=55296&&n<=57343&&++t,r+=4}return r}var Et={};function xt(e){var r=Et[e];return void 0===r?sr(e):r}var Ct=[];function Tt(){if("object"==typeof globalThis)return globalThis;function e(e){e.$$$embind_global$$$=e;var r="object"==typeof $$$embind_global$$$&&e.$$$embind_global$$$==e;return r||delete e.$$$embind_global$$$,r}if("object"==typeof $$$embind_global$$$)return $$$embind_global$$$;if("object"==typeof global&&e(global)?$$$embind_global$$$=global:"object"==typeof self&&e(self)&&($$$embind_global$$$=self),"object"==typeof $$$embind_global$$$)return $$$embind_global$$$;throw Error("unable to get global object.")}var St=[];function Pt(e){return N[e>>2]+4294967296*I[e+4>>2]}function kt(e){return e%4==0&&(e%100!=0||e%400==0)}var Ft=[0,31,60,91,121,152,182,213,244,274,305,335],Lt=[0,31,59,90,120,151,181,212,243,273,304,334];function At(e){return(kt(e.getFullYear())?Ft:Lt)[e.getMonth()]+e.getDate()-1}function Dt(e){var r=H(e)+1,t=En(r);return t&&G(e,B,t,r),t}var Bt=[];function Mt(e,r,t){var n=function(e,r){var t;for(A(Array.isArray(Bt)),A(r%16==0),Bt.length=0,r>>=2;t=M[e++];){var n=String.fromCharCode(t),o=["d","f","i"];A(o.includes(n),"Invalid character "+t+'("'+n+'") in readEmAsmArgs! Use only ['+o+'], and do not specify "v" for void return argument.'),r+=105!=t&r,Bt.push(105==t?I[r]:U[r++>>1]),++r}return Bt}(r,t);return Ee.hasOwnProperty(e)||de("No EM_ASM constant found at address "+e),Ee[e].apply(null,n)}function Ot(e){try{return P.grow(e-D.byteLength+65535>>>16),q(P.buffer),1}catch(r){E("emscripten_realloc_buffer: Attempted to grow heap from "+D.byteLength+" bytes to "+e+" bytes, but got error: "+r)}}function Rt(e){return de("Cannot use convertFrameToPC (needed by __builtin_return_address) without -sUSE_OFFSET_CONVERTER"),0}var It={};function Nt(e){e.forEach((e=>{var r=Rt();r&&(It[r]=e)}))}function jt(){var e=new Error;if(!e.stack){try{throw new Error}catch(r){e=r}if(!e.stack)return"(no stack trace available)"}return e.stack.toString()}var Ut={counter:1,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],byteSizeByTypeRoot:5120,byteSizeByType:[1,1,2,2,4,4,4,2,3,4,8],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function(e){Ut.lastError||(Ut.lastError=e)},getNewId:function(e){for(var r=Ut.counter++,t=e.length;t>1,c=new Uint16Array(u),l=(n=0,0);!(c[n++]=l,n>=u||(c[n++]=l+1,n>=u)||(c[n++]=l+2,n>=u)||(c[n++]=l,n>=u)||(c[n++]=l+2,n>=u)||(c[n++]=l+3,n>=u));)l+=4;r.GLctx.bufferData(34963,c,35044),r.GLctx.bindBuffer(34963,null)}},getTempVertexBuffer:function(e){var r=Ut.log2ceilLookup(e),t=Ut.currentContext.tempVertexBuffers1[r],n=Ut.currentContext.tempVertexBufferCounters1[r];Ut.currentContext.tempVertexBufferCounters1[r]=Ut.currentContext.tempVertexBufferCounters1[r]+1&Ut.numTempVertexBuffersPerSize-1;var o=t[n];if(o)return o;var a=fn.getParameter(34964);return t[n]=fn.createBuffer(),fn.bindBuffer(34962,t[n]),fn.bufferData(34962,1<>2]:-1;o+=z(I[t+4*a>>2],i<0?void 0:i)}return o},calcBufLength:function(e,r,t,n){return t>0?n*t:e*Ut.byteSizeByType[r-Ut.byteSizeByTypeRoot]*n},usedTempBuffers:[],preDrawHandleClientVertexAttribBindings:function(e){Ut.resetBufferBinding=!1;for(var r=0;r1?e.getContext("webgl2",r):e.getContext("webgl",r);return t?Ut.registerContext(t,r):0},enableOffscreenFramebufferAttributes:function(e){e.renderViaOffscreenBackBuffer=!0,e.preserveDrawingBuffer=!0},createOffscreenFramebuffer:function(e){var r=e.GLctx,t=r.createFramebuffer();if(r.bindFramebuffer(36160,t),e.defaultFbo=t,e.defaultFboForbidBlitFramebuffer=!1,r.getContextAttributes().antialias)e.defaultFboForbidBlitFramebuffer=!0;else{var n=navigator.userAgent.toLowerCase().match(/firefox\/(\d\d)/);if(null!=n){var o=n[1];e.defaultFboForbidBlitFramebuffer=o<67}}e.defaultColorTarget=r.createTexture(),e.defaultDepthTarget=r.createRenderbuffer(),Ut.resizeOffscreenFramebuffer(e),r.bindTexture(3553,e.defaultColorTarget),r.texParameteri(3553,10241,9728),r.texParameteri(3553,10240,9728),r.texParameteri(3553,10242,33071),r.texParameteri(3553,10243,33071),r.texImage2D(3553,0,6408,r.canvas.width,r.canvas.height,0,6408,5121,null),r.framebufferTexture2D(36160,36064,3553,e.defaultColorTarget,0),r.bindTexture(3553,null);r.createRenderbuffer();r.bindRenderbuffer(36161,e.defaultDepthTarget),r.renderbufferStorage(36161,33189,r.canvas.width,r.canvas.height),r.framebufferRenderbuffer(36160,36096,36161,e.defaultDepthTarget),r.bindRenderbuffer(36161,null);var a=r.createBuffer();r.bindBuffer(34962,a),r.bufferData(34962,new Float32Array([-1,-1,-1,1,1,-1,1,1]),35044),r.bindBuffer(34962,null),e.blitVB=a;var i=r.createShader(35633);r.shaderSource(i,"attribute vec2 pos;varying lowp vec2 tex;void main() { tex = pos * 0.5 + vec2(0.5,0.5); gl_Position = vec4(pos, 0.0, 1.0); }"),r.compileShader(i);var s=r.createShader(35632);r.shaderSource(s,"varying lowp vec2 tex;uniform sampler2D sampler;void main() { gl_FragColor = texture2D(sampler, tex); }"),r.compileShader(s);var u=r.createProgram();r.attachShader(u,i),r.attachShader(u,s),r.linkProgram(u),e.blitProgram=u,e.blitPosLoc=r.getAttribLocation(u,"pos"),r.useProgram(u),r.uniform1i(r.getUniformLocation(u,"sampler"),0),r.useProgram(null),e.defaultVao=void 0,r.createVertexArray&&(e.defaultVao=r.createVertexArray(),r.bindVertexArray(e.defaultVao),r.enableVertexAttribArray(e.blitPosLoc),r.bindVertexArray(null))},resizeOffscreenFramebuffer:function(e){var r=e.GLctx;if(e.defaultColorTarget){var t=r.getParameter(32873);r.bindTexture(3553,e.defaultColorTarget),r.texImage2D(3553,0,6408,r.drawingBufferWidth,r.drawingBufferHeight,0,6408,5121,null),r.bindTexture(3553,t)}if(e.defaultDepthTarget){var n=r.getParameter(36007);r.bindRenderbuffer(36161,e.defaultDepthTarget),r.renderbufferStorage(36161,33189,r.drawingBufferWidth,r.drawingBufferHeight),r.bindRenderbuffer(36161,n)}},blitOffscreenFramebuffer:function(e){var r=e.GLctx,t=r.getParameter(3089);t&&r.disable(3089);var n=r.getParameter(36006);if(r.blitFramebuffer&&!e.defaultFboForbidBlitFramebuffer)r.bindFramebuffer(36008,e.defaultFbo),r.bindFramebuffer(36009,null),r.blitFramebuffer(0,0,r.canvas.width,r.canvas.height,0,0,r.canvas.width,r.canvas.height,16384,9728);else{r.bindFramebuffer(36160,null);var o=r.getParameter(35725);r.useProgram(e.blitProgram);var a=r.getParameter(34964);r.bindBuffer(34962,e.blitVB);var i=r.getParameter(34016);r.activeTexture(33984);var s=r.getParameter(32873);r.bindTexture(3553,e.defaultColorTarget);var u=r.getParameter(3042);u&&r.disable(3042);var c=r.getParameter(2884);c&&r.disable(2884);var l=r.getParameter(2929);l&&r.disable(2929);var d=r.getParameter(2960);function f(){r.vertexAttribPointer(e.blitPosLoc,2,5126,!1,0,0),r.drawArrays(5,0,4)}if(d&&r.disable(2960),e.defaultVao){var m=r.getParameter(34229);r.bindVertexArray(e.defaultVao),f(),r.bindVertexArray(m)}else{for(var p={buffer:r.getVertexAttrib(e.blitPosLoc,34975),size:r.getVertexAttrib(e.blitPosLoc,34339),stride:r.getVertexAttrib(e.blitPosLoc,34340),type:r.getVertexAttrib(e.blitPosLoc,34341),normalized:r.getVertexAttrib(e.blitPosLoc,34922),pointer:r.getVertexAttribOffset(e.blitPosLoc,34373)},g=r.getParameter(34921),v=[],h=0;h=2&&(t.disjointTimerQueryExt=t.getExtension("EXT_disjoint_timer_query_webgl2")),(e.version<2||!t.disjointTimerQueryExt)&&(t.disjointTimerQueryExt=t.getExtension("EXT_disjoint_timer_query")),function(e){e.multiDrawWebgl=e.getExtension("WEBGL_multi_draw")}(t),(t.getSupportedExtensions()||[]).forEach((function(e){e.includes("lose_context")||e.includes("debug")||t.getExtension(e)}))}}},Vt={inEventHandler:0,removeAllEventListeners:function(){for(var e=Vt.eventHandlers.length-1;e>=0;--e)Vt._removeHandler(e);Vt.eventHandlers=[],Vt.deferredCalls=[]},registerRemoveEventListeners:function(){Vt.removeEventListenersRegistered||(ee.push(Vt.removeAllEventListeners),Vt.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(e,r,t){function n(e,r){if(e.length!=r.length)return!1;for(var t in e)if(e[t]!=r[t])return!1;return!0}for(var o in Vt.deferredCalls){var a=Vt.deferredCalls[o];if(a.targetFunction==e&&n(a.argsList,t))return}Vt.deferredCalls.push({targetFunction:e,precedence:r,argsList:t}),Vt.deferredCalls.sort((function(e,r){return e.precedence>2,n=I[t+6],o={alpha:!!I[t+0],depth:!!I[t+1],stencil:!!I[t+2],antialias:!!I[t+3],premultipliedAlpha:!!I[t+4],preserveDrawingBuffer:!!I[t+5],powerPreference:$t[n],failIfMajorPerformanceCaveat:!!I[t+7],majorVersion:I[t+8],minorVersion:I[t+9],enableExtensionsByDefault:I[t+10],explicitSwapControl:I[t+11],proxyContextToMainThread:I[t+12],renderViaOffscreenBackBuffer:I[t+13]},a=Gt(e);if(!a)return 0;if(a.offscreenCanvas&&(a=a.offscreenCanvas),o.explicitSwapControl&&(a.transferControlToOffscreen||"undefined"!=typeof OffscreenCanvas&&a instanceof OffscreenCanvas||o.renderViaOffscreenBackBuffer||(o.renderViaOffscreenBackBuffer=!0),a.transferControlToOffscreen)){if(a.controlTransferredOffscreen){if(!Ut.offscreenCanvases[a.id])return 0}else Ut.offscreenCanvases[a.id]={canvas:a.transferControlToOffscreen(),canvasSharedPtr:En(12),id:a.id},a.controlTransferredOffscreen=!0;a=Ut.offscreenCanvases[a.id]}return Ut.createContext(a,o)};var Ht=function(){return Ut.currentContext?Ut.currentContext.handle:0};var qt={initManagers:function(){function e(){this.objects={},this.nextId=1,this.create=function(e,r){r=r||{};var t=this.nextId++;return A(void 0===this.objects[t]),r.refcount=1,r.object=e,this.objects[t]=r,t},this.get=function(e){if(e){var r=this.objects[e];return A(void 0!==r),r.object}},this.reference=function(e){var r=this.objects[e];A(void 0!==r),r.refcount++},this.release=function(e){var r=this.objects[e];A(void 0!==r),A(r.refcount>0),r.refcount--,r.refcount<=0&&delete this.objects[e]}}qt.mgrDevice||(qt.mgrSurface=qt.mgrSurface||new e,qt.mgrSwapChain=qt.mgrSwapChain||new e,qt.mgrAdapter=qt.mgrAdapter||new e,qt.mgrDevice=qt.mgrDevice||new e,qt.mgrQueue=qt.mgrQueue||new e,qt.mgrCommandBuffer=qt.mgrCommandBuffer||new e,qt.mgrCommandEncoder=qt.mgrCommandEncoder||new e,qt.mgrRenderPassEncoder=qt.mgrRenderPassEncoder||new e,qt.mgrComputePassEncoder=qt.mgrComputePassEncoder||new e,qt.mgrBindGroup=qt.mgrBindGroup||new e,qt.mgrBuffer=qt.mgrBuffer||new e,qt.mgrSampler=qt.mgrSampler||new e,qt.mgrTexture=qt.mgrTexture||new e,qt.mgrTextureView=qt.mgrTextureView||new e,qt.mgrQuerySet=qt.mgrQuerySet||new e,qt.mgrBindGroupLayout=qt.mgrBindGroupLayout||new e,qt.mgrPipelineLayout=qt.mgrPipelineLayout||new e,qt.mgrRenderPipeline=qt.mgrRenderPipeline||new e,qt.mgrComputePipeline=qt.mgrComputePipeline||new e,qt.mgrShaderModule=qt.mgrShaderModule||new e,qt.mgrRenderBundleEncoder=qt.mgrRenderBundleEncoder||new e,qt.mgrRenderBundle=qt.mgrRenderBundle||new e)},makeColor:function(e){return{r:U[e>>3],g:U[e+8>>3],b:U[e+16>>3],a:U[e+24>>3]}},makeExtent3D:function(e){return{width:N[e>>2],height:N[e+4>>2],depthOrArrayLayers:N[e+8>>2]}},makeOrigin3D:function(e){return{x:N[e>>2],y:N[e+4>>2],z:N[e+8>>2]}},makeImageCopyTexture:function(e){return A(e),A(0===N[e>>2]),{texture:qt.mgrTexture.get(N[e+4>>2]),mipLevel:N[e+8>>2],origin:qt.makeOrigin3D(e+12),aspect:qt.TextureAspect[N[e+24>>2]]}},makeTextureDataLayout:function(e){A(e),A(0===N[e>>2]);var r=N[e+16>>2],t=N[e+20>>2];return{offset:4294967296*N[e+4+8>>2]+N[e+8>>2],bytesPerRow:4294967295===r?void 0:r,rowsPerImage:4294967295===t?void 0:t}},makeImageCopyBuffer:function(e){A(e),A(0===N[e>>2]);var r=e+8,t=qt.makeTextureDataLayout(r);return t.buffer=qt.mgrBuffer.get(N[e+32>>2]),t},makePipelineConstants:function(e,r){if(e){for(var t={},n=0;n>2])]=U[o+8>>3]}return t}},makeProgrammableStageDescriptor:function(e){if(e)return A(e),A(0===N[e>>2]),{module:qt.mgrShaderModule.get(N[e+4>>2]),entryPoint:z(N[e+8>>2]),constants:qt.makePipelineConstants(N[e+12>>2],N[e+16>>2])}},DeviceLostReason:{undefined:0,destroyed:1},PreferredFormat:{rgba8unorm:18,bgra8unorm:23},AddressMode:["repeat","mirror-repeat","clamp-to-edge"],BlendFactor:["zero","one","src","one-minus-src","src-alpha","one-minus-src-alpha","dst","one-minus-dst","dst-alpha","one-minus-dst-alpha","src-alpha-saturated","constant","one-minus-constant"],BlendOperation:["add","subtract","reverse-subtract","min","max"],BufferBindingType:[,"uniform","storage","read-only-storage"],CompareFunction:[,"never","less","less-equal","greater","greater-equal","equal","not-equal","always"],CompilationInfoRequestStatus:["success","error","device-lost","unknown"],ComputePassTimestampLocation:["beginning","end"],CullMode:["none","front","back"],ErrorFilter:["validation","out-of-memory"],FeatureName:[,"depth-clip-control","depth32float-stencil8","timestamp-query","pipeline-statistics-query","texture-compression-bc","texture-compression-etc2","texture-compression-astc","indirect-first-instance"],FilterMode:["nearest","linear"],FrontFace:["ccw","cw"],IndexFormat:[,"uint16","uint32"],LoadOp:[,"clear","load"],PipelineStatisticName:["vertex-shader-invocations","clipper-invocations","clipper-primitives-out","fragment-shader-invocations","compute-shader-invocations"],PowerPreference:[,"low-power","high-performance"],PrimitiveTopology:["point-list","line-list","line-strip","triangle-list","triangle-strip"],QueryType:["occlusion","pipeline-statistics","timestamp"],RenderPassTimestampLocation:["beginning","end"],SamplerBindingType:[,"filtering","non-filtering","comparison"],StencilOperation:["keep","zero","replace","invert","increment-clamp","decrement-clamp","increment-wrap","decrement-wrap"],StorageTextureAccess:[,"write-only"],StoreOp:[,"store","discard"],TextureAspect:["all","stencil-only","depth-only"],TextureComponentType:["float","sint","uint","depth-comparison"],TextureDimension:["1d","2d","3d"],TextureFormat:[,"r8unorm","r8snorm","r8uint","r8sint","r16uint","r16sint","r16float","rg8unorm","rg8snorm","rg8uint","rg8sint","r32float","r32uint","r32sint","rg16uint","rg16sint","rg16float","rgba8unorm","rgba8unorm-srgb","rgba8snorm","rgba8uint","rgba8sint","bgra8unorm","bgra8unorm-srgb","rgb10a2unorm","rg11b10ufloat","rgb9e5ufloat","rg32float","rg32uint","rg32sint","rgba16uint","rgba16sint","rgba16float","rgba32float","rgba32uint","rgba32sint","stencil8","depth16unorm","depth24plus","depth24plus-stencil8","depth32float","depth32float-stencil8","bc1-rgba-unorm","bc1-rgba-unorm-srgb","bc2-rgba-unorm","bc2-rgba-unorm-srgb","bc3-rgba-unorm","bc3-rgba-unorm-srgb","bc4-r-unorm","bc4-r-snorm","bc5-rg-unorm","bc5-rg-snorm","bc6h-rgb-ufloat","bc6h-rgb-float","bc7-rgba-unorm","bc7-rgba-unorm-srgb","etc2-rgb8unorm","etc2-rgb8unorm-srgb","etc2-rgb8a1unorm","etc2-rgb8a1unorm-srgb","etc2-rgba8unorm","etc2-rgba8unorm-srgb","eac-r11unorm","eac-r11snorm","eac-rg11unorm","eac-rg11snorm","astc-4x4-unorm","astc-4x4-unorm-srgb","astc-5x4-unorm","astc-5x4-unorm-srgb","astc-5x5-unorm","astc-5x5-unorm-srgb","astc-6x5-unorm","astc-6x5-unorm-srgb","astc-6x6-unorm","astc-6x6-unorm-srgb","astc-8x5-unorm","astc-8x5-unorm-srgb","astc-8x6-unorm","astc-8x6-unorm-srgb","astc-8x8-unorm","astc-8x8-unorm-srgb","astc-10x5-unorm","astc-10x5-unorm-srgb","astc-10x6-unorm","astc-10x6-unorm-srgb","astc-10x8-unorm","astc-10x8-unorm-srgb","astc-10x10-unorm","astc-10x10-unorm-srgb","astc-12x10-unorm","astc-12x10-unorm-srgb","astc-12x12-unorm","astc-12x12-unorm-srgb"],TextureSampleType:[,"float","unfilterable-float","depth","sint","uint"],TextureViewDimension:[,"1d","2d","2d-array","cube","cube-array","3d"],VertexFormat:[,"uint8x2","uint8x4","sint8x2","sint8x4","unorm8x2","unorm8x4","snorm8x2","snorm8x4","uint16x2","uint16x4","sint16x2","sint16x4","unorm16x2","unorm16x4","snorm16x2","snorm16x4","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4"],VertexStepMode:["vertex","instance"],FeatureNameString2Enum:{undefined:"0","depth-clip-control":"1","depth32float-stencil8":"2","timestamp-query":"3","pipeline-statistics-query":"4","texture-compression-bc":"5","texture-compression-etc2":"6","texture-compression-astc":"7","indirect-first-instance":"8"}},Yt={values:{},next_id:1,add:function(e){var r;do{r=Yt.next_id++,Yt.next_id>2147483647&&(Yt.next_id=1)}while(r in Yt.values);return Yt.values[r]=e,r},remove:function(e){A(e in Yt.values),delete Yt.values[e]},get:function(e){return A(0===e||e in Yt.values),Yt.values[e]}};var Xt={};function Qt(){if(!Qt.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:s||"./this.program"};for(var r in Xt)void 0===Xt[r]?delete e[r]:e[r]=Xt[r];var t=[];for(var r in e)t.push(r+"="+e[r]);Qt.strings=t}return Qt.strings}var Kt=[];function Jt(e,r,t,n){for(var o=0;o>2]=i}}function Zt(e,r){N[e>>2]=r,N[e+4>>2]=(r-N[e>>2])/4294967296;var t=r>=0?function(e){return N[e>>2]+4294967296*N[e+4>>2]}(e):Pt(e);t!=r&&Ve("writeI53ToI64() out of range: serialized JS Number "+r+" to Wasm heap as bytes lo="+Ge(N[e>>2])+", hi="+Ge(N[e+4>>2])+", which deserializes back to "+t+" instead!")}function en(e){var r=H(e)+1,t=En(r);return W(e,t,r),t}function rn(e){return"]"==e.slice(-1)&&e.lastIndexOf("[")}function tn(e){return 0==(e-=5120)?B:1==e?M:2==e?O:4==e?I:6==e?j:5==e||28922==e||28520==e||30779==e||30782==e?N:R}function nn(e){return 31-Math.clz32(e.BYTES_PER_ELEMENT)}function on(e,r,t,n,o,a){var i=tn(e),s=nn(i),u=1<>s,o+l>>s)}function an(e){var r=fn.currentProgram;if(r){var t=r.uniformLocsById[e];return"number"==typeof t&&(r.uniformLocsById[e]=t=fn.getUniformLocation(r,r.uniformArrayNamesById[e]+(t>0?"["+t+"]":""))),t}Ut.recordError(1282)}var sn=[];var un=[];var cn=[31,29,31,30,31,30,31,31,30,31,30,31],ln=[31,28,31,30,31,30,31,31,30,31,30,31];function dn(e,r,t,n){var o=I[n+40>>2],a={tm_sec:I[n>>2],tm_min:I[n+4>>2],tm_hour:I[n+8>>2],tm_mday:I[n+12>>2],tm_mon:I[n+16>>2],tm_year:I[n+20>>2],tm_wday:I[n+24>>2],tm_yday:I[n+28>>2],tm_isdst:I[n+32>>2],tm_gmtoff:I[n+36>>2],tm_zone:o?z(o):""},i=z(t),s={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var u in s)i=i.replace(new RegExp(u,"g"),s[u]);var c=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],l=["January","February","March","April","May","June","July","August","September","October","November","December"];function d(e,r,t){for(var n="number"==typeof e?e.toString():e||"";n.length0?1:0}var n;return 0===(n=t(e.getFullYear()-r.getFullYear()))&&0===(n=t(e.getMonth()-r.getMonth()))&&(n=t(e.getDate()-r.getDate())),n}function p(e){switch(e.getDay()){case 0:return new Date(e.getFullYear()-1,11,29);case 1:return e;case 2:return new Date(e.getFullYear(),0,3);case 3:return new Date(e.getFullYear(),0,2);case 4:return new Date(e.getFullYear(),0,1);case 5:return new Date(e.getFullYear()-1,11,31);case 6:return new Date(e.getFullYear()-1,11,30)}}function g(e){var r=function(e,r){for(var t=new Date(e.getTime());r>0;){var n=kt(t.getFullYear()),o=t.getMonth(),a=(n?cn:ln)[o];if(!(r>a-t.getDate()))return t.setDate(t.getDate()+r),t;r-=a-t.getDate()+1,t.setDate(1),o<11?t.setMonth(o+1):(t.setMonth(0),t.setFullYear(t.getFullYear()+1))}return t}(new Date(e.tm_year+1900,0,1),e.tm_yday),t=new Date(r.getFullYear(),0,4),n=new Date(r.getFullYear()+1,0,4),o=p(t),a=p(n);return m(o,r)<=0?m(a,r)<=0?r.getFullYear()+1:r.getFullYear():r.getFullYear()-1}var v={"%a":function(e){return c[e.tm_wday].substring(0,3)},"%A":function(e){return c[e.tm_wday]},"%b":function(e){return l[e.tm_mon].substring(0,3)},"%B":function(e){return l[e.tm_mon]},"%C":function(e){return f((e.tm_year+1900)/100|0,2)},"%d":function(e){return f(e.tm_mday,2)},"%e":function(e){return d(e.tm_mday,2," ")},"%g":function(e){return g(e).toString().substring(2)},"%G":function(e){return g(e)},"%H":function(e){return f(e.tm_hour,2)},"%I":function(e){var r=e.tm_hour;return 0==r?r=12:r>12&&(r-=12),f(r,2)},"%j":function(e){return f(e.tm_mday+function(e,r){for(var t=0,n=0;n<=r;t+=e[n++]);return t}(kt(e.tm_year+1900)?cn:ln,e.tm_mon-1),3)},"%m":function(e){return f(e.tm_mon+1,2)},"%M":function(e){return f(e.tm_min,2)},"%n":function(){return"\n"},"%p":function(e){return e.tm_hour>=0&&e.tm_hour<12?"AM":"PM"},"%S":function(e){return f(e.tm_sec,2)},"%t":function(){return"\t"},"%u":function(e){return e.tm_wday||7},"%U":function(e){var r=e.tm_yday+7-e.tm_wday;return f(Math.floor(r/7),2)},"%V":function(e){var r=Math.floor((e.tm_yday+7-(e.tm_wday+6)%7)/7);if((e.tm_wday+371-e.tm_yday-2)%7<=2&&r++,r){if(53==r){var t=(e.tm_wday+371-e.tm_yday)%7;4==t||3==t&&kt(e.tm_year)||(r=1)}}else{r=52;var n=(e.tm_wday+7-e.tm_yday-1)%7;(4==n||5==n&&kt(e.tm_year%400-1))&&r++}return f(r,2)},"%w":function(e){return e.tm_wday},"%W":function(e){var r=e.tm_yday+7-(e.tm_wday+6)%7;return f(Math.floor(r/7),2)},"%y":function(e){return(e.tm_year+1900).toString().substring(2)},"%Y":function(e){return e.tm_year+1900},"%z":function(e){var r=e.tm_gmtoff,t=r>=0;return r=(r=Math.abs(r)/60)/60*100+r%60,(t?"+":"-")+String("0000"+r).slice(-4)},"%Z":function(e){return e.tm_zone},"%%":function(){return"%"}};for(var u in i=i.replace(/%%/g,"\0\0"),v)i.includes(u)&&(i=i.replace(new RegExp(u,"g"),v[u](a)));var h=ke(i=i.replace(/\0\0/g,"%"),!1);return h.length>r?0:(function(e,r){A(e.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)"),B.set(e,r)}(h,e),h.length-1)}o.requestFullscreen=function(e,r){$e.requestFullscreen(e,r)},o.requestFullScreen=function(){$e.requestFullScreen()},o.requestAnimationFrame=function(e){$e.requestAnimationFrame(e)},o.setCanvasSize=function(e,r,t){$e.setCanvasSize(e,r,t)},o.pauseMainLoop=function(){$e.mainLoop.pause()},o.resumeMainLoop=function(){$e.mainLoop.resume()},o.getUserMedia=function(){$e.getUserMedia()},o.createContext=function(e,r,t,n){return $e.createContext(e,r,t,n)};var fn,mn={},pn={},gn=function(e,r,t,n){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=Oe.nextInode++,this.name=r,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=n},vn=365,hn=146;Object.defineProperties(gn.prototype,{read:{get:function(){return(this.mode&vn)===vn},set:function(e){e?this.mode|=vn:this.mode&=-366}},write:{get:function(){return(this.mode&hn)===hn},set:function(e){e?this.mode|=hn:this.mode&=-147}},isFolder:{get:function(){return Oe.isDir(this.mode)}},isDevice:{get:function(){return Oe.isChrdev(this.mode)}}}),Oe.FSNode=gn,Oe.staticInit(),o.FS_createPath=Oe.createPath,o.FS_createDataFile=Oe.createDataFile,o.FS_createPreloadedFile=Oe.createPreloadedFile,o.FS_unlink=Oe.unlink,o.FS_createLazyFile=Oe.createLazyFile,o.FS_createDevice=Oe.createDevice,Be={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},er=o.BindingError=Ze(Error,"BindingError"),o.count_emval_handles=tr,o.get_first_emval=nr,ar=o.PureVirtualError=Ze(Error,"PureVirtualError"),function(){for(var e=new Array(256),r=0;r<256;++r)e[r]=String.fromCharCode(r);ir=e}(),o.getInheritedInstanceCount=ur,o.getLiveInheritedInstances=cr,o.flushPendingDeletes=dr,o.setDelayFunction=mr,Cr=o.InternalError=Ze(Error,"InternalError"),zr.prototype.isAliasOf=Ir,zr.prototype.clone=jr,zr.prototype.delete=Ur,zr.prototype.isDeleted=Vr,zr.prototype.deleteLater=$r,et.prototype.getPointee=Kr,et.prototype.destructor=Jr,et.prototype.argPackAdvance=8,et.prototype.readValueFromPointer=Ar,et.prototype.deleteObject=Zr,et.prototype.fromWireType=Pr,it=o.UnboundTypeError=Ze(Error,"UnboundTypeError"),qt.initManagers();for(var yn=0;yn<32;++yn)Kt.push(new Array(yn));var bn=new Float32Array(288);for(yn=0;yn<288;++yn)sn[yn]=bn.subarray(0,yn+1);var wn=new Int32Array(288);for(yn=0;yn<288;++yn)un[yn]=wn.subarray(0,yn+1);"function"==typeof atob&&atob;var _n={HaveOffsetConverter:function(){return"undefined"!=typeof wasmOffsetConverter},__assert_fail:function(e,r,t,n){de("Assertion failed: "+z(e)+", at: "+[r?z(r):"unknown filename",t,n?z(n):"unknown function"])},__cxa_allocate_exception:function(e){return En(e+24)+24},__cxa_throw:function(e,r,t){throw new We(e).init(r,t),e,e+" - Exception catching is disabled, this exception cannot be caught. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch."},__syscall_dup:function(e){try{var r=Re.getStreamFromFD(e);return Oe.createStream(r,0).fd}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},__syscall_fcntl64:function(e,r,t){Re.varargs=t;try{var n=Re.getStreamFromFD(e);switch(r){case 0:return(o=Re.get())<0?-28:Oe.createStream(n,o).fd;case 1:case 2:case 6:case 7:return 0;case 3:return n.flags;case 4:var o=Re.get();return n.flags|=o,0;case 5:o=Re.get();return O[o+0>>1]=2,0;case 16:case 8:default:return-28;case 9:return a=28,I[Cn()>>2]=a,-1}}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}var a},__syscall_fstat64:function(e,r){try{var t=Re.getStreamFromFD(e);return Re.doStat(Oe.stat,t.path,r)}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},__syscall_ioctl:function(e,r,t){Re.varargs=t;try{var n=Re.getStreamFromFD(e);switch(r){case 21509:case 21505:case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:case 21523:case 21524:return n.tty?0:-59;case 21519:if(!n.tty)return-59;var o=Re.get();return I[o>>2]=0,0;case 21520:return n.tty?-28:-59;case 21531:o=Re.get();return Oe.ioctl(n,r,o);default:return-28}}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},__syscall_lstat64:function(e,r){try{return e=Re.getStr(e),Re.doStat(Oe.lstat,e,r)}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},__syscall_newfstatat:function(e,r,t,n){try{r=Re.getStr(r);var o=256&n,a=4096&n;return A(!(n&=-6401),"unknown flags in __syscall_newfstatat: "+n),r=Re.calculateAt(e,r,a),Re.doStat(o?Oe.lstat:Oe.stat,r,t)}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},__syscall_openat:function(e,r,t,n){Re.varargs=n;try{r=Re.getStr(r),r=Re.calculateAt(e,r);var o=n?Re.get():0;return Oe.open(r,t,o).fd}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},__syscall_stat64:function(e,r){try{return e=Re.getStr(e),Re.doStat(Oe.stat,e,r)}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},_dlinit:function(e){},_dlopen_js:function(e,r){de(He)},_dlsym_js:function(e,r){de(He)},_embind_create_inheriting_constructor:function(e,r,t){e=sr(e),r=yr(r,"wrapper"),t=or.toValue(t);var n=[].slice,o=r.registeredClass,a=o.instancePrototype,i=o.baseClass.instancePrototype,s=o.baseClass.constructor,u=Qe(e,(function(){o.baseClass.pureVirtualFunctions.forEach(function(e){if(this[e]===i[e])throw new ar("Pure virtual function "+e+" must be implemented in JavaScript")}.bind(this)),Object.defineProperty(this,"__parent",{value:a}),this.__construct.apply(this,n.call(arguments))}));for(var c in a.__construct=function(){this===a&&rr("Pass correct 'this' to __construct");var e=s.implement.apply(void 0,[this].concat(n.call(arguments)));br(e);var r,t,i,u=e.$$;e.notifyOnDestruction(),u.preservePointerOnDelete=!0,Object.defineProperties(this,{$$:{value:u}}),kr(this),r=o,t=u.ptr,i=this,t=gr(r,t),pr.hasOwnProperty(t)?rr("Tried to register registered instance: "+t):pr[t]=i},a.__destruct=function(){var e,r;this===a&&rr("Pass correct 'this' to __destruct"),br(this),e=o,r=this.$$.ptr,r=gr(e,r),pr.hasOwnProperty(r)?delete pr[r]:rr("Tried to unregister unregistered instance: "+r)},u.prototype=Object.create(a),t)u.prototype[c]=t[c];return or.toHandle(u)},_embind_finalize_value_object:function(e){var r=Fr[e];delete Fr[e];var t=r.rawConstructor,n=r.rawDestructor,o=r.fields;Mr([e],o.map((e=>e.getterReturnType)).concat(o.map((e=>e.setterArgumentType))),(e=>{var a={};return o.forEach(((r,t)=>{var n=r.fieldName,i=e[t],s=r.getter,u=r.getterContext,c=e[t+o.length],l=r.setter,d=r.setterContext;a[n]={read:e=>i.fromWireType(s(u,e)),write:(e,r)=>{var t=[];l(d,e,c.toWireType(t,r)),Lr(t)}}})),[{name:r.name,fromWireType:function(e){var r={};for(var t in a)r[t]=a[t].read(e);return n(e),r},toWireType:function(e,r){for(var o in a)if(!(o in r))throw new TypeError('Missing field: "'+o+'"');var i=t();for(o in a)a[o].write(i,r[o]);return null!==e&&e.push(n,i),i},argPackAdvance:8,readValueFromPointer:Ar,destructorFunction:n}]}))},_embind_register_bigint:function(e,r,t,n,o){},_embind_register_bool:function(e,r,t,n,o){var a=Or(t);Rr(e,{name:r=sr(r),fromWireType:function(e){return!!e},toWireType:function(e,r){return r?n:o},argPackAdvance:8,readValueFromPointer:function(e){var n;if(1===t)n=B;else if(2===t)n=O;else{if(4!==t)throw new TypeError("Unknown boolean type size: "+r);n=I}return this.fromWireType(n[e>>a])},destructorFunction:null})},_embind_register_class:function(e,r,t,n,o,a,i,s,u,c,l,d,f){l=sr(l),a=at(o,a),s&&(s=at(i,s)),c&&(c=at(u,c)),f=at(d,f);var m=Xe(l);Wr(m,(function(){st("Cannot construct "+l+" due to unbound types",[n])})),Mr([e,r,t],n?[n]:[],(function(r){var t,o;r=r[0],o=n?(t=r.registeredClass).instancePrototype:zr.prototype;var i=Qe(m,(function(){if(Object.getPrototypeOf(this)!==u)throw new er("Use 'new' to construct "+l);if(void 0===d.constructor_body)throw new er(l+" has no accessible constructor");var e=d.constructor_body[arguments.length];if(void 0===e)throw new er("Tried to invoke ctor of "+l+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(d.constructor_body).toString()+") parameters instead!");return e.apply(this,arguments)})),u=Object.create(o,{constructor:{value:i}});i.prototype=u;var d=new Hr(l,i,u,f,t,a,s,c),p=new et(l,d,!0,!1,!1),g=new et(l+"*",d,!1,!1,!1),v=new et(l+" const*",d,!1,!0,!1);return xr[e]={pointerType:g,constPointerType:v},rt(m,i),[p,g,v]}))},_embind_register_class_class_function:function(e,r,t,n,o,a,i){var s=ct(t,n);r=sr(r),a=at(o,a),Mr([],[e],(function(e){var n=(e=e[0]).name+"."+r;function o(){st("Cannot call "+n+" due to unbound types",s)}r.startsWith("@@")&&(r=Symbol[r.substring(2)]);var u=e.registeredClass.constructor;return void 0===u[r]?(o.argCount=t-1,u[r]=o):(Gr(u,r,n),u[r].overloadTable[t-1]=o),Mr([],s,(function(e){var o=[e[0],null].concat(e.slice(1)),s=ut(n,o,null,a,i);return void 0===u[r].overloadTable?(s.argCount=t-1,u[r]=s):u[r].overloadTable[t-1]=s,[]})),[]}))},_embind_register_class_constructor:function(e,r,t,n,o,a){A(r>0);var i=ct(r,t);o=at(n,o),Mr([],[e],(function(e){var t="constructor "+(e=e[0]).name;if(void 0===e.registeredClass.constructor_body&&(e.registeredClass.constructor_body=[]),void 0!==e.registeredClass.constructor_body[r-1])throw new er("Cannot register multiple constructors with identical number of parameters ("+(r-1)+") for class '"+e.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");return e.registeredClass.constructor_body[r-1]=()=>{st("Cannot construct "+e.name+" due to unbound types",i)},Mr([],i,(function(n){return n.splice(1,0,null),e.registeredClass.constructor_body[r-1]=ut(t,n,null,o,a),[]})),[]}))},_embind_register_class_function:function(e,r,t,n,o,a,i,s){var u=ct(t,n);r=sr(r),a=at(o,a),Mr([],[e],(function(e){var n=(e=e[0]).name+"."+r;function o(){st("Cannot call "+n+" due to unbound types",u)}r.startsWith("@@")&&(r=Symbol[r.substring(2)]),s&&e.registeredClass.pureVirtualFunctions.push(r);var c=e.registeredClass.instancePrototype,l=c[r];return void 0===l||void 0===l.overloadTable&&l.className!==e.name&&l.argCount===t-2?(o.argCount=t-2,o.className=e.name,c[r]=o):(Gr(c,r,n),c[r].overloadTable[t-2]=o),Mr([],u,(function(o){var s=ut(n,o,e,a,i);return void 0===c[r].overloadTable?(s.argCount=t-2,c[r]=s):c[r].overloadTable[t-2]=s,[]})),[]}))},_embind_register_class_property:function(e,r,t,n,o,a,i,s,u,c){r=sr(r),o=at(n,o),Mr([],[e],(function(e){var n=(e=e[0]).name+"."+r,l={get:function(){st("Cannot access "+n+" due to unbound types",[t,i])},enumerable:!0,configurable:!0};return l.set=u?()=>{st("Cannot access "+n+" due to unbound types",[t,i])}:e=>{rr(n+" is a read-only property")},Object.defineProperty(e.registeredClass.instancePrototype,r,l),Mr([],u?[t,i]:[t],(function(t){var i=t[0],l={get:function(){var r=lt(this,e,n+" getter");return i.fromWireType(o(a,r))},enumerable:!0};if(u){u=at(s,u);var d=t[1];l.set=function(r){var t=lt(this,e,n+" setter"),o=[];u(c,t,d.toWireType(o,r)),Lr(o)}}return Object.defineProperty(e.registeredClass.instancePrototype,r,l),[]})),[]}))},_embind_register_emval:function(e,r){Rr(e,{name:r=sr(r),fromWireType:function(e){var r=or.toValue(e);return dt(e),r},toWireType:function(e,r){return or.toHandle(r)},argPackAdvance:8,readValueFromPointer:Ar,destructorFunction:null})},_embind_register_float:function(e,r,t){var n=Or(t);Rr(e,{name:r=sr(r),fromWireType:function(e){return e},toWireType:function(e,r){if("number"!=typeof r&&"boolean"!=typeof r)throw new TypeError('Cannot convert "'+ft(r)+'" to '+this.name);return r},argPackAdvance:8,readValueFromPointer:mt(r,n),destructorFunction:null})},_embind_register_function:function(e,r,t,n,o,a){var i=ct(r,t);e=sr(e),o=at(n,o),Wr(e,(function(){st("Cannot call "+e+" due to unbound types",i)}),r-1),Mr([],i,(function(t){var n=[t[0],null].concat(t.slice(1));return rt(e,ut(e,n,null,o,a),r-1),[]}))},_embind_register_integer:function(e,r,t,n,o){r=sr(r),-1===o&&(o=4294967295);var a=Or(t),i=e=>e;if(0===n){var s=32-8*t;i=e=>e<>>s}var u=r.includes("unsigned"),c=(e,t)=>{if("number"!=typeof e&&"boolean"!=typeof e)throw new TypeError('Cannot convert "'+ft(e)+'" to '+t);if(eo)throw new TypeError('Passing a number "'+ft(e)+'" from JS side to C/C++ side to an argument of type "'+r+'", which is outside the valid range ['+n+", "+o+"]!")};Rr(e,{name:r,fromWireType:i,toWireType:u?function(e,r){return c(r,this.name),r>>>0}:function(e,r){return c(r,this.name),r},argPackAdvance:8,readValueFromPointer:pt(r,a,0!==n),destructorFunction:null})},_embind_register_memory_view:function(e,r,t){var n=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][r];function o(e){var r=N,t=r[e>>=2],o=r[e+1];return new n(D,o,t)}Rr(e,{name:t=sr(t),fromWireType:o,argPackAdvance:8,readValueFromPointer:o},{ignoreDuplicateRegistrations:!0})},_embind_register_std_string:function(e,r){var t="std::string"===(r=sr(r));Rr(e,{name:r,fromWireType:function(e){var r,n=N[e>>2],o=e+4;if(t)for(var a=o,i=0;i<=n;++i){var s=o+i;if(i==n||0==M[s]){var u=z(a,s-a);void 0===r?r=u:(r+=String.fromCharCode(0),r+=u),a=s+1}}else{var c=new Array(n);for(i=0;i>2]=n,t&&o)W(r,i,n+1);else if(o)for(var s=0;s255&&(xn(i),rr("String has UTF-16 code units that do not fit in 8 bits")),M[i+s]=u}else for(s=0;sR,s=1):4===r&&(n=bt,o=wt,i=_t,a=()=>N,s=2),Rr(e,{name:t,fromWireType:function(e){for(var t,o=N[e>>2],i=a(),u=e+4,c=0;c<=o;++c){var l=e+4+c*r;if(c==o||0==i[l>>s]){var d=n(u,l-u);void 0===t?t=d:(t+=String.fromCharCode(0),t+=d),u=l+r}}return xn(e),t},toWireType:function(e,n){"string"!=typeof n&&rr("Cannot pass non-string to C++ string type "+t);var a=i(n),u=En(4+a+r);return N[u>>2]=a>>s,o(n,u+4,a+r),null!==e&&e.push(xn,u),u},argPackAdvance:8,readValueFromPointer:Ar,destructorFunction:function(e){xn(e)}})},_embind_register_value_object:function(e,r,t,n,o,a){Fr[e]={name:sr(r),rawConstructor:at(t,n),rawDestructor:at(o,a),fields:[]}},_embind_register_value_object_field:function(e,r,t,n,o,a,i,s,u,c){Fr[e].fields.push({fieldName:sr(r),getterReturnType:t,getter:at(n,o),getterContext:a,setterArgumentType:i,setter:at(s,u),setterContext:c})},_embind_register_void:function(e,r){Rr(e,{isVoid:!0,name:r=sr(r),argPackAdvance:0,fromWireType:function(){},toWireType:function(e,r){}})},_emscripten_get_now_is_monotonic:function(){return true},_emval_as:function(e,r,t){e=or.toValue(e),r=yr(r,"emval::as");var n=[],o=or.toHandle(n);return N[t>>2]=o,r.toWireType(n,e)},_emval_call_void_method:function(e,r,t,n){(e=Ct[e])(r=or.toValue(r),t=xt(t),null,n)},_emval_decref:dt,_emval_get_global:function(e){return 0===e?or.toHandle(Tt()):(e=xt(e),or.toHandle(Tt()[e]))},_emval_get_method_caller:function(e,r){var t=function(e,r){for(var t=new Array(e),n=0;n>2],"parameter "+n);return t}(e,r),n=t[0],o=n.name+"_$"+t.slice(1).map((function(e){return e.name})).join("_")+"$",a=St[o];if(void 0!==a)return a;var i,s,u=new Array(e-1);return i=(r,o,a,i)=>{for(var s=0,c=0;c4&&(Ke[e].refcount+=1)},_emval_instanceof:function(e,r){return(e=or.toValue(e))instanceof(r=or.toValue(r))},_emval_new_cstring:function(e){return or.toHandle(xt(e))},_emval_run_destructors:function(e){Lr(or.toValue(e)),dt(e)},_emval_set_property:function(e,r,t){e=or.toValue(e),r=or.toValue(r),t=or.toValue(t),e[r]=t},_emval_take_value:function(e,r){var t=(e=yr(e,"_emval_take_value")).readValueFromPointer(r);return or.toHandle(t)},_emval_typeof:function(e){return e=or.toValue(e),or.toHandle(typeof e)},_gmtime_js:function(e,r){var t=new Date(1e3*Pt(e));I[r>>2]=t.getUTCSeconds(),I[r+4>>2]=t.getUTCMinutes(),I[r+8>>2]=t.getUTCHours(),I[r+12>>2]=t.getUTCDate(),I[r+16>>2]=t.getUTCMonth(),I[r+20>>2]=t.getUTCFullYear()-1900,I[r+24>>2]=t.getUTCDay();var n=Date.UTC(t.getUTCFullYear(),0,1,0,0,0,0),o=(t.getTime()-n)/864e5|0;I[r+28>>2]=o},_localtime_js:function(e,r){var t=new Date(1e3*Pt(e));I[r>>2]=t.getSeconds(),I[r+4>>2]=t.getMinutes(),I[r+8>>2]=t.getHours(),I[r+12>>2]=t.getDate(),I[r+16>>2]=t.getMonth(),I[r+20>>2]=t.getFullYear()-1900,I[r+24>>2]=t.getDay();var n=0|At(t);I[r+28>>2]=n,I[r+36>>2]=-60*t.getTimezoneOffset();var o=new Date(t.getFullYear(),0,1),a=new Date(t.getFullYear(),6,1).getTimezoneOffset(),i=o.getTimezoneOffset(),s=0|(a!=i&&t.getTimezoneOffset()==Math.min(i,a));I[r+32>>2]=s},_mktime_js:function(e){var r=new Date(I[e+20>>2]+1900,I[e+16>>2],I[e+12>>2],I[e+8>>2],I[e+4>>2],I[e>>2],0),t=I[e+32>>2],n=r.getTimezoneOffset(),o=new Date(r.getFullYear(),0,1),a=new Date(r.getFullYear(),6,1).getTimezoneOffset(),i=o.getTimezoneOffset(),s=Math.min(i,a);if(t<0)I[e+32>>2]=Number(a!=i&&s==n);else if(t>0!=(s==n)){var u=Math.max(i,a),c=t>0?s:u;r.setTime(r.getTime()+6e4*(c-n))}I[e+24>>2]=r.getDay();var l=0|At(r);return I[e+28>>2]=l,I[e>>2]=r.getSeconds(),I[e+4>>2]=r.getMinutes(),I[e+8>>2]=r.getHours(),I[e+12>>2]=r.getDate(),I[e+16>>2]=r.getMonth(),I[e+20>>2]=r.getYear(),r.getTime()/1e3|0},_mmap_js:function(e,r,t,n,o,a,i){try{var s=Re.getStreamFromFD(n),u=Oe.mmap(s,e,o,r,t),c=u.ptr;return I[a>>2]=u.allocated,N[i>>2]=c,0}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},_munmap_js:function(e,r,t,n,o,a){try{var i=Re.getStreamFromFD(o);2&t&&Re.doMsync(e,i,r,n,a),Oe.munmap(i)}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return-e.errno}},_tzset_js:function(e,r,t){var n=(new Date).getFullYear(),o=new Date(n,0,1),a=new Date(n,6,1),i=o.getTimezoneOffset(),s=a.getTimezoneOffset(),u=Math.max(i,s);function c(e){var r=e.toTimeString().match(/\(([A-Za-z ]+)\)$/);return r?r[1]:"GMT"}N[e>>2]=60*u,I[r>>2]=Number(i!=s);var l=c(o),d=c(a),f=Dt(l),m=Dt(d);s>2]=f,N[t+4>>2]=m):(N[t>>2]=m,N[t+4>>2]=f)},abort:function(){de("native code called abort()")},emscripten_asm_const_int:function(e,r,t){return Mt(e,r,t)},emscripten_date_now:function(){return Date.now()},emscripten_get_heap_max:function(){return 2147483648},emscripten_get_now:_e,emscripten_memcpy_big:function(e,r,t){M.copyWithin(e,r,r+t)},emscripten_pc_get_function:function(e){de("Cannot use emscripten_pc_get_function without -sUSE_OFFSET_CONVERTER")},emscripten_resize_heap:function(e){var r=M.length;A((e>>>=0)>r);var t,n,o=2147483648;if(e>o)return E("Cannot enlarge memory, asked to go up to "+e+" bytes, but the limit is "+o+" bytes!"),!1;for(var a=1;a<=4;a*=2){var i=r*(1+.2/a);i=Math.min(i,e+100663296);var s=Math.min(o,(t=Math.max(e,i))+((n=65536)-t%n)%n);if(Ot(s))return!0}return E("Failed to grow the heap from "+r+" bytes to "+s+" bytes, not enough memory!"),!1},emscripten_stack_snapshot:function(){var e=jt().split("\n");return"Error"==e[0]&&e.shift(),Nt(e),It.last_addr=Rt(e[3]),It.last_stack=e,It.last_addr},emscripten_stack_unwind_buffer:function(e,r,t){var n;It.last_addr==e?n=It.last_stack:("Error"==(n=jt().split("\n"))[0]&&n.shift(),Nt(n));for(var o=3;n[o]&&Rt(n[o])!=e;)++o;for(var a=0;a>2]=Rt(n[a+o]);return a},emscripten_webgl_create_context:Wt,emscripten_webgl_destroy_context:function(e){Ut.currentContext==e&&(Ut.currentContext=0),Ut.deleteContext(e)},emscripten_webgl_get_context_attributes:function(e,r){if(!r)return-5;if(!(e=Ut.contexts[e]))return-3;var t=e.GLctx;if(!t)return-3;t=t.getContextAttributes(),I[r>>2]=t.alpha,I[r+4>>2]=t.depth,I[r+8>>2]=t.stencil,I[r+12>>2]=t.antialias,I[r+16>>2]=t.premultipliedAlpha,I[r+20>>2]=t.preserveDrawingBuffer;var n=t.powerPreference&&$t.indexOf(t.powerPreference);return I[r+24>>2]=n,I[r+28>>2]=t.failIfMajorPerformanceCaveat,I[r+32>>2]=e.version,I[r+36>>2]=0,I[r+40>>2]=e.attributes.enableExtensionsByDefault,0},emscripten_webgl_get_current_context:Ht,emscripten_webgl_init_context_attributes:function(e){A(e);for(var r=e>>2,t=0;t<14;++t)I[r+t]=0;I[r+0]=I[r+1]=I[r+3]=I[r+4]=I[r+8]=I[r+10]=1},emscripten_webgl_make_context_current:function(e){return Ut.makeContextCurrent(e)?0:-5},emscripten_webgpu_export_bind_group_layout:function(e){return Yt.add(qt.mgrBindGroupLayout.get(e))},emscripten_webgpu_export_device:function(e){return Yt.add(qt.mgrDevice.get(e))},emscripten_webgpu_export_sampler:function(e){return Yt.add(qt.mgrSampler.get(e))},emscripten_webgpu_export_texture:function(e){return Yt.add(qt.mgrTexture.get(e))},emscripten_webgpu_get_device:function(){if(A(o.preinitializedWebGPUDevice),void 0===qt.preinitializedDeviceId){var e=o.preinitializedWebGPUDevice,r={queueId:qt.mgrQueue.create(e.queue)};qt.preinitializedDeviceId=qt.mgrDevice.create(e,r)}return qt.mgrDevice.reference(qt.preinitializedDeviceId),qt.preinitializedDeviceId},emscripten_webgpu_import_bind_group:function(e){return qt.mgrBindGroup.create(Yt.get(e))},emscripten_webgpu_import_texture:function(e){return qt.mgrTexture.create(Yt.get(e))},emscripten_webgpu_release_js_handle:function(e){Yt.remove(e)},environ_get:function(e,r){var t=0;return Qt().forEach((function(n,o){var a=r+t;N[e+4*o>>2]=a,function(e,r,t){for(var n=0;n>0]=e.charCodeAt(n);t||(B[r>>0]=0)}(n,a),t+=n.length+1})),0},environ_sizes_get:function(e,r){var t=Qt();N[e>>2]=t.length;var n=0;return t.forEach((function(e){n+=e.length+1})),N[r>>2]=n,0},exit:Ne,fd_close:function(e){try{var r=Re.getStreamFromFD(e);return Oe.close(r),0}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return e.errno}},fd_read:function(e,r,t,n){try{var o=function(e,r,t,n){for(var o=0,a=0;a>2],s=N[r+4>>2];r+=8;var u=Oe.read(e,B,i,s,n);if(u<0)return-1;if(o+=u,u>2]=o,0}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return e.errno}},fd_seek:function(e,r,t,n,o){try{var a=(u=t,A((s=r)==s>>>0||s==(0|s)),A(u===(0|u)),u+2097152>>>0<4194305-!!s?(s>>>0)+4294967296*u:NaN);if(isNaN(a))return 61;var i=Re.getStreamFromFD(e);return Oe.llseek(i,a,n),ge=[i.position>>>0,(pe=i.position,+Math.abs(pe)>=1?pe>0?(0|Math.min(+Math.floor(pe/4294967296),4294967295))>>>0:~~+Math.ceil((pe-+(~~pe>>>0))/4294967296)>>>0:0)],I[o>>2]=ge[0],I[o+4>>2]=ge[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return e.errno}var s,u},fd_write:function(e,r,t,n){try{var o=function(e,r,t,n){for(var o=0,a=0;a>2],s=N[r+4>>2];r+=8;var u=Oe.write(e,B,i,s,n);if(u<0)return-1;o+=u}return o}(Re.getStreamFromFD(e),r,t);return N[n>>2]=o,0}catch(e){if(void 0===Oe||!(e instanceof Oe.ErrnoError))throw e;return e.errno}},getentropy:function e(r,t){e.randomDevice||(e.randomDevice=Se());for(var n=0;n>0]=e.randomDevice();return 0},glActiveTexture:function(e){fn.activeTexture(e)},glAttachShader:function(e,r){fn.attachShader(Ut.programs[e],Ut.shaders[r])},glBindAttribLocation:function(e,r,t){fn.bindAttribLocation(Ut.programs[e],r,z(t))},glBindBuffer:function(e,r){34962==e?fn.currentArrayBufferBinding=r:34963==e&&(fn.currentElementArrayBufferBinding=r),35051==e?fn.currentPixelPackBufferBinding=r:35052==e&&(fn.currentPixelUnpackBufferBinding=r),fn.bindBuffer(e,Ut.buffers[r])},glBindBufferBase:function(e,r,t){fn.bindBufferBase(e,r,Ut.buffers[t])},glBindFramebuffer:function(e,r){fn.bindFramebuffer(e,r?Ut.framebuffers[r]:Ut.currentContext.defaultFbo)},glBindTexture:function(e,r){fn.bindTexture(e,Ut.textures[r])},glBindVertexArray:function(e){fn.bindVertexArray(Ut.vaos[e]);var r=fn.getParameter(34965);fn.currentElementArrayBufferBinding=r?0|r.name:0},glBufferData:function(e,r,t,n){Ut.currentContext.version>=2?t&&r?fn.bufferData(e,M,n,t,r):fn.bufferData(e,r,n):fn.bufferData(e,t?M.subarray(t,t+r):r,n)},glClientWaitSync:function(e,r,t,n){return fn.clientWaitSync(Ut.syncs[e],r,(o=t,A((a=n)===(0|a)),(o>>>0)+4294967296*a));var o,a},glCompileShader:function(e){fn.compileShader(Ut.shaders[e])},glCreateProgram:function(){var e=Ut.getNewId(Ut.programs),r=fn.createProgram();return r.name=e,r.maxUniformLength=r.maxAttributeLength=r.maxUniformBlockNameLength=0,r.uniformIdCounter=1,Ut.programs[e]=r,e},glCreateShader:function(e){var r=Ut.getNewId(Ut.shaders);return Ut.shaders[r]=fn.createShader(e),r},glDeleteBuffers:function(e,r){for(var t=0;t>2],o=Ut.buffers[n];o&&(fn.deleteBuffer(o),o.name=0,Ut.buffers[n]=null,n==fn.currentArrayBufferBinding&&(fn.currentArrayBufferBinding=0),n==fn.currentElementArrayBufferBinding&&(fn.currentElementArrayBufferBinding=0),n==fn.currentPixelPackBufferBinding&&(fn.currentPixelPackBufferBinding=0),n==fn.currentPixelUnpackBufferBinding&&(fn.currentPixelUnpackBufferBinding=0))}},glDeleteFramebuffers:function(e,r){for(var t=0;t>2],o=Ut.framebuffers[n];o&&(fn.deleteFramebuffer(o),o.name=0,Ut.framebuffers[n]=null)}},glDeleteProgram:function(e){if(e){var r=Ut.programs[e];r?(fn.deleteProgram(r),r.name=0,Ut.programs[e]=null):Ut.recordError(1281)}},glDeleteShader:function(e){if(e){var r=Ut.shaders[e];r?(fn.deleteShader(r),Ut.shaders[e]=null):Ut.recordError(1281)}},glDeleteSync:function(e){if(e){var r=Ut.syncs[e];r?(fn.deleteSync(r),r.name=0,Ut.syncs[e]=null):Ut.recordError(1281)}},glDeleteTextures:function(e,r){for(var t=0;t>2],o=Ut.textures[n];o&&(fn.deleteTexture(o),o.name=0,Ut.textures[n]=null)}},glDeleteVertexArrays:function(e,r){for(var t=0;t>2];fn.deleteVertexArray(Ut.vaos[n]),Ut.vaos[n]=null}},glDisable:function(e){fn.disable(e)},glDisableVertexAttribArray:function(e){Ut.currentContext.clientBuffers[e].enabled=!1,fn.disableVertexAttribArray(e)},glDrawArrays:function(e,r,t){Ut.preDrawHandleClientVertexAttribBindings(r+t),fn.drawArrays(e,r,t),Ut.postDrawHandleClientVertexAttribBindings()},glDrawBuffers:function(e,r){for(var t=Kt[e],n=0;n>2];fn.drawBuffers(t)},glEnableVertexAttribArray:function(e){Ut.currentContext.clientBuffers[e].enabled=!0,fn.enableVertexAttribArray(e)},glFenceSync:function(e,r){var t=fn.fenceSync(e,r);if(t){var n=Ut.getNewId(Ut.syncs);return t.name=n,Ut.syncs[n]=t,n}return 0},glFinish:function(){fn.finish()},glFlush:function(){fn.flush()},glFramebufferTexture2D:function(e,r,t,n,o){fn.framebufferTexture2D(e,r,t,Ut.textures[n],o)},glFramebufferTextureLayer:function(e,r,t,n,o){fn.framebufferTextureLayer(e,r,Ut.textures[t],n,o)},glGenBuffers:function(e,r){Jt(e,r,"createBuffer",Ut.buffers)},glGenFramebuffers:function(e,r){Jt(e,r,"createFramebuffer",Ut.framebuffers)},glGenTextures:function(e,r){Jt(e,r,"createTexture",Ut.textures)},glGenVertexArrays:function(e,r){Jt(e,r,"createVertexArray",Ut.vaos)},glGetAttribLocation:function(e,r){return fn.getAttribLocation(Ut.programs[e],z(r))},glGetError:function(){var e=fn.getError()||Ut.lastError;return Ut.lastError=0,e},glGetIntegerv:function(e,r){!function(e,r,t){if(r){var n=void 0;switch(e){case 36346:n=1;break;case 36344:return void(0!=t&&1!=t&&Ut.recordError(1280));case 34814:case 36345:n=0;break;case 34466:var o=fn.getParameter(34467);n=o?o.length:0;break;case 33309:if(Ut.currentContext.version<2)return void Ut.recordError(1282);n=2*(fn.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(Ut.currentContext.version<2)return void Ut.recordError(1280);n=33307==e?3:0}if(void 0===n){var a=fn.getParameter(e);switch(typeof a){case"number":n=a;break;case"boolean":n=a?1:0;break;case"string":return void Ut.recordError(1280);case"object":if(null===a)switch(e){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:n=0;break;default:return void Ut.recordError(1280)}else{if(a instanceof Float32Array||a instanceof Uint32Array||a instanceof Int32Array||a instanceof Array){for(var i=0;i>2]=a[i];break;case 2:j[r+4*i>>2]=a[i];break;case 4:B[r+i>>0]=a[i]?1:0}return}try{n=0|a.name}catch(r){return Ut.recordError(1280),void E("GL_INVALID_ENUM in glGet"+t+"v: Unknown object returned from WebGL getParameter("+e+")! (error: "+r+")")}}break;default:return Ut.recordError(1280),void E("GL_INVALID_ENUM in glGet"+t+"v: Native code calling glGet"+t+"v("+e+") and it returns "+a+" of type "+typeof a+"!")}}switch(t){case 1:Zt(r,n);break;case 0:I[r>>2]=n;break;case 2:j[r>>2]=n;break;case 4:B[r>>0]=n?1:0}}else Ut.recordError(1281)}(e,r,0)},glGetProgramiv:function(e,r,t){if(t)if(e>=Ut.counter)Ut.recordError(1281);else if(e=Ut.programs[e],35716==r){var n=fn.getProgramInfoLog(e);null===n&&(n="(unknown error)"),I[t>>2]=n.length+1}else if(35719==r){if(!e.maxUniformLength)for(var o=0;o>2]=e.maxUniformLength}else if(35722==r){if(!e.maxAttributeLength)for(o=0;o>2]=e.maxAttributeLength}else if(35381==r){if(!e.maxUniformBlockNameLength)for(o=0;o>2]=e.maxUniformBlockNameLength}else I[t>>2]=fn.getProgramParameter(e,r);else Ut.recordError(1281)},glGetShaderInfoLog:function(e,r,t,n){var o=fn.getShaderInfoLog(Ut.shaders[e]);null===o&&(o="(unknown error)");var a=r>0&&n?W(o,n,r):0;t&&(I[t>>2]=a)},glGetShaderiv:function(e,r,t){if(t)if(35716==r){var n=fn.getShaderInfoLog(Ut.shaders[e]);null===n&&(n="(unknown error)");var o=n?n.length+1:0;I[t>>2]=o}else if(35720==r){var a=fn.getShaderSource(Ut.shaders[e]),i=a?a.length+1:0;I[t>>2]=i}else I[t>>2]=fn.getShaderParameter(Ut.shaders[e],r);else Ut.recordError(1281)},glGetString:function(e){var r=Ut.stringCache[e];if(!r){switch(e){case 7939:var t=fn.getSupportedExtensions()||[];r=en((t=t.concat(t.map((function(e){return"GL_"+e})))).join(" "));break;case 7936:case 7937:case 37445:case 37446:var n=fn.getParameter(e);n||Ut.recordError(1280),r=n&&en(n);break;case 7938:var o=fn.getParameter(7938);r=en(o=Ut.currentContext.version>=2?"OpenGL ES 3.0 ("+o+")":"OpenGL ES 2.0 ("+o+")");break;case 35724:var a=fn.getParameter(35724),i=a.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==i&&(3==i[1].length&&(i[1]=i[1]+"0"),a="OpenGL ES GLSL ES "+i[1]+" ("+a+")"),r=en(a);break;default:Ut.recordError(1280)}Ut.stringCache[e]=r}return r},glGetUniformBlockIndex:function(e,r){return fn.getUniformBlockIndex(Ut.programs[e],z(r))},glGetUniformLocation:function(e,r){if(r=z(r),e=Ut.programs[e]){!function(e){var r,t,n=e.uniformLocsById,o=e.uniformSizeAndIdsByName;if(!n)for(e.uniformLocsById=n={},e.uniformArrayNamesById={},r=0;r0?i.slice(0,u):i,l=e.uniformIdCounter;for(e.uniformIdCounter+=s,o[c]=[s,l],t=0;t0&&(s=r.slice(a+1),n=parseInt(s)>>>0,o=r.slice(0,a));var i=e.uniformSizeAndIdsByName[o];if(i&&n=2)if(fn.currentPixelPackBufferBinding)fn.readPixels(e,r,t,n,o,a,i);else{var s=tn(a);fn.readPixels(e,r,t,n,o,a,s,i>>nn(s))}else{var u=on(a,o,t,n,i);u?fn.readPixels(e,r,t,n,o,a,u):Ut.recordError(1280)}},glShaderSource:function(e,r,t,n){var o=Ut.getSource(e,r,t,n);fn.shaderSource(Ut.shaders[e],o)},glTexImage2D:function(e,r,t,n,o,a,i,s,u){if(Ut.currentContext.version>=2)if(fn.currentPixelUnpackBufferBinding)fn.texImage2D(e,r,t,n,o,a,i,s,u);else if(u){var c=tn(s);fn.texImage2D(e,r,t,n,o,a,i,s,c,u>>nn(c))}else fn.texImage2D(e,r,t,n,o,a,i,s,null);else fn.texImage2D(e,r,t,n,o,a,i,s,u?on(s,i,n,o,u):null)},glTexParameterfv:function(e,r,t){var n=j[t>>2];fn.texParameterf(e,r,n)},glTexParameteri:function(e,r,t){fn.texParameteri(e,r,t)},glTexStorage2D:function(e,r,t,n,o){fn.texStorage2D(e,r,t,n,o)},glTexStorage3D:function(e,r,t,n,o,a){fn.texStorage3D(e,r,t,n,o,a)},glTexSubImage2D:function(e,r,t,n,o,a,i,s,u){if(Ut.currentContext.version>=2)if(fn.currentPixelUnpackBufferBinding)fn.texSubImage2D(e,r,t,n,o,a,i,s,u);else if(u){var c=tn(s);fn.texSubImage2D(e,r,t,n,o,a,i,s,c,u>>nn(c))}else fn.texSubImage2D(e,r,t,n,o,a,i,s,null);else{var l=null;u&&(l=on(s,i,o,a,u)),fn.texSubImage2D(e,r,t,n,o,a,i,s,l)}},glTexSubImage3D:function(e,r,t,n,o,a,i,s,u,c,l){if(fn.currentPixelUnpackBufferBinding)fn.texSubImage3D(e,r,t,n,o,a,i,s,u,c,l);else if(l){var d=tn(c);fn.texSubImage3D(e,r,t,n,o,a,i,s,u,c,d,l>>nn(d))}else fn.texSubImage3D(e,r,t,n,o,a,i,s,u,c,null)},glUniform1f:function(e,r){fn.uniform1f(an(e),r)},glUniform1i:function(e,r){fn.uniform1i(an(e),r)},glUniform2fv:function(e,r,t){if(Ut.currentContext.version>=2)r&&fn.uniform2fv(an(e),j,t>>2,2*r);else{if(r<=144)for(var n=sn[2*r-1],o=0;o<2*r;o+=2)n[o]=j[t+4*o>>2],n[o+1]=j[t+(4*o+4)>>2];else n=j.subarray(t>>2,t+8*r>>2);fn.uniform2fv(an(e),n)}},glUniform4fv:function(e,r,t){if(Ut.currentContext.version>=2)r&&fn.uniform4fv(an(e),j,t>>2,4*r);else{if(r<=72){var n=sn[4*r-1],o=j;t>>=2;for(var a=0;a<4*r;a+=4){var i=t+a;n[a]=o[i],n[a+1]=o[i+1],n[a+2]=o[i+2],n[a+3]=o[i+3]}}else n=j.subarray(t>>2,t+16*r>>2);fn.uniform4fv(an(e),n)}},glUniform4iv:function(e,r,t){if(Ut.currentContext.version>=2)r&&fn.uniform4iv(an(e),I,t>>2,4*r);else{if(r<=72)for(var n=un[4*r-1],o=0;o<4*r;o+=4)n[o]=I[t+4*o>>2],n[o+1]=I[t+(4*o+4)>>2],n[o+2]=I[t+(4*o+8)>>2],n[o+3]=I[t+(4*o+12)>>2];else n=I.subarray(t>>2,t+16*r>>2);fn.uniform4iv(an(e),n)}},glUniformBlockBinding:function(e,r,t){e=Ut.programs[e],fn.uniformBlockBinding(e,r,t)},glUniformMatrix4fv:function(e,r,t,n){if(Ut.currentContext.version>=2)r&&fn.uniformMatrix4fv(an(e),!!t,j,n>>2,16*r);else{if(r<=18){var o=sn[16*r-1],a=j;n>>=2;for(var i=0;i<16*r;i+=16){var s=n+i;o[i]=a[s],o[i+1]=a[s+1],o[i+2]=a[s+2],o[i+3]=a[s+3],o[i+4]=a[s+4],o[i+5]=a[s+5],o[i+6]=a[s+6],o[i+7]=a[s+7],o[i+8]=a[s+8],o[i+9]=a[s+9],o[i+10]=a[s+10],o[i+11]=a[s+11],o[i+12]=a[s+12],o[i+13]=a[s+13],o[i+14]=a[s+14],o[i+15]=a[s+15]}}else o=j.subarray(n>>2,n+64*r>>2);fn.uniformMatrix4fv(an(e),!!t,o)}},glUseProgram:function(e){e=Ut.programs[e],fn.useProgram(e),fn.currentProgram=e},glVertexAttribPointer:function(e,r,t,n,o,a){var i=Ut.currentContext.clientBuffers[e];if(!fn.currentArrayBufferBinding)return i.size=r,i.type=t,i.normalized=n,i.stride=o,i.ptr=a,i.clientside=!0,void(i.vertexAttribPointerAdaptor=function(e,r,t,n,o,a){this.vertexAttribPointer(e,r,t,n,o,a)});i.clientside=!1,fn.vertexAttribPointer(e,r,t,!!n,o,a)},glViewport:function(e,r,t,n){fn.viewport(e,r,t,n)},mediapipe_create_utility_canvas2d:function(){const e=document.createElement("canvas");return e.style.display="none",e.id="canvas_2d",document.body.appendChild(e),or.toHandle(e)},mediapipe_find_canvas_event_target:function(e){return or.toHandle(Gt(e))},mediapipe_import_external_texture:function(e,r){const t=qt.mgrDevice.get(e),n=or.toValue(r),o=t.importExternalTexture({source:n});return or.toHandle(o)},mediapipe_webgl_tex_image_drawable:function(e){const r=or.toValue(e);fn.texImage2D(fn.TEXTURE_2D,0,fn.RGBA,fn.RGBA,fn.UNSIGNED_BYTE,r)},proc_exit:Ie,strftime:dn,strftime_l:function(e,r,t,n,o){return dn(e,r,t,n)},wgpuBindGroupLayoutRelease:function(e){qt.mgrBindGroupLayout.release(e)},wgpuBindGroupRelease:function(e){qt.mgrBindGroup.release(e)},wgpuBufferGetMappedRange:function(e,r,t){var n,o=qt.mgrBuffer.objects[e];if(A(void 0!==o),0===t&&Ve("getMappedRange size=0 no longer means WGPU_WHOLE_MAP_SIZE"),4294967295===(t>>>=0)&&(t=void 0),2!==o.mapMode)return de("GetMappedRange called, but buffer not mapped for writing"),0;try{n=o.object.getMappedRange(r,t)}catch(e){return E("wgpuBufferGetMappedRange("+r+", "+t+") failed: "+e),0}var a=En(n.byteLength);return M.fill(0,a,n.byteLength),o.onUnmap.push((function(){new Uint8Array(n).set(M.subarray(a,a+n.byteLength)),xn(a)})),a},wgpuBufferReference:function(e){qt.mgrBuffer.reference(e)},wgpuBufferRelease:function(e){qt.mgrBuffer.release(e)},wgpuBufferUnmap:function(e){var r=qt.mgrBuffer.objects[e];if(A(void 0!==r),r.onUnmap){for(var t=0;t>2]),queryIndex:N[e+4>>2],location:qt.ComputePassTimestampLocation[N[e+8>>2]]}}if(r){A(r),A(0===N[r>>2]),t={};var o=N[r+4>>2];o&&(t.label=z(o));var a=N[r+8>>2];a&&(t.timestampWrites=function(e,r){for(var t=[],o=0;o>2]))}var i=qt.mgrCommandEncoder.get(e);return qt.mgrComputePassEncoder.create(i.beginComputePass(t))},wgpuCommandEncoderBeginRenderPass:function(e,r){function t(e){var r=N[e>>2];if(0!==r){var t=N[e+8>>2];A(0!==t);var n=N[e+12>>2];A(0!==n);var o=qt.makeColor(e+16);return{view:qt.mgrTextureView.get(r),resolveTarget:qt.mgrTextureView.get(N[e+4>>2]),clearValue:o,loadOp:qt.LoadOp[t],storeOp:qt.StoreOp[n]}}}function n(e,r){for(var n=[],o=0;o>2]),depthClearValue:j[e+12>>2],depthLoadOp:qt.LoadOp[N[e+4>>2]],depthStoreOp:qt.StoreOp[N[e+8>>2]],depthReadOnly:0!==B[e+16>>0],stencilClearValue:N[e+28>>2],stencilLoadOp:qt.LoadOp[N[e+20>>2]],stencilStoreOp:qt.StoreOp[N[e+24>>2]],stencilReadOnly:0!==B[e+32>>0]}}function a(e){return{querySet:qt.mgrQuerySet.get(N[e>>2]),queryIndex:N[e+4>>2],location:qt.RenderPassTimestampLocation[N[e+8>>2]]}}A(r);var i=function(e){A(e);var r=N[e>>2],t=void 0;if(0!==r){A(15===N[r+4>>2]),A(0===N[r>>2]);var i=r;A(i),A(0===N[i>>2]),t=4294967296*N[i+4+8>>2]+N[i+8>>2]}var s={label:void 0,colorAttachments:n(N[e+8>>2],N[e+12>>2]),depthStencilAttachment:o(N[e+16>>2]),occlusionQuerySet:qt.mgrQuerySet.get(N[e+20>>2]),maxDrawCount:t},u=N[e+4>>2];u&&(s.label=z(u));var c=N[e+24>>2];return c&&(s.timestampWrites=function(e,r){for(var t=[],n=0;n>2])),s}(r),s=qt.mgrCommandEncoder.get(e);return qt.mgrRenderPassEncoder.create(s.beginRenderPass(i))},wgpuCommandEncoderCopyBufferToTexture:function(e,r,t,n){var o=qt.mgrCommandEncoder.get(e),a=qt.makeExtent3D(n);o.copyBufferToTexture(qt.makeImageCopyBuffer(r),qt.makeImageCopyTexture(t),a)},wgpuCommandEncoderCopyTextureToTexture:function(e,r,t,n){var o=qt.mgrCommandEncoder.get(e),a=qt.makeExtent3D(n);o.copyTextureToTexture(qt.makeImageCopyTexture(r),qt.makeImageCopyTexture(t),a)},wgpuCommandEncoderFinish:function(e){var r=qt.mgrCommandEncoder.get(e);return qt.mgrCommandBuffer.create(r.finish())},wgpuCommandEncoderRelease:function(e){qt.mgrCommandEncoder.release(e)},wgpuComputePassEncoderDispatchWorkgroups:function(e,r,t,n){var o=qt.mgrComputePassEncoder.get(e);o.dispatchWorkgroups?o.dispatchWorkgroups(r,t,n):o.dispatch(r,t,n)},wgpuComputePassEncoderEnd:function(e){qt.mgrComputePassEncoder.get(e).end()},wgpuComputePassEncoderRelease:function(e){qt.mgrComputePassEncoder.release(e)},wgpuComputePassEncoderSetBindGroup:function(e,r,t,n,o){var a=qt.mgrComputePassEncoder.get(e),i=qt.mgrBindGroup.get(t);if(0==n)a.setBindGroup(r,i);else{for(var s=[],u=0;u>2]);a.setBindGroup(r,i,s)}},wgpuComputePassEncoderSetPipeline:function(e,r){var t=qt.mgrComputePassEncoder.get(e),n=qt.mgrComputePipeline.get(r);t.setPipeline(n)},wgpuComputePipelineGetBindGroupLayout:function(e,r){var t=qt.mgrComputePipeline.get(e);return qt.mgrBindGroupLayout.create(t.getBindGroupLayout(r))},wgpuComputePipelineRelease:function(e){qt.mgrComputePipeline.release(e)},wgpuDeviceCreateBindGroup:function(e,r){function t(e){A(e);var r=N[e+8>>2],t=N[e+32>>2],n=N[e+36>>2];A((0!==r)+(0!==t)+(0!==n)===1);var o=N[e+4>>2];if(r){var a=N[e+24>>2],i=N[e+28>>2],s=-1===i&&-1===a?void 0:(A(i<2097152),4294967296*i+a);return{binding:o,resource:{buffer:qt.mgrBuffer.get(r),offset:4294967296*N[e+4+16>>2]+N[e+16>>2],size:s}}}return t?{binding:o,resource:qt.mgrSampler.get(t)}:{binding:o,resource:qt.mgrTextureView.get(n)}}A(r),A(0===N[r>>2]);var n={label:void 0,layout:qt.mgrBindGroupLayout.get(N[r+8>>2]),entries:function(e,r){for(var n=[],o=0;o>2],N[r+16>>2])},o=N[r+4>>2];o&&(n.label=z(o));var a=qt.mgrDevice.get(e);return qt.mgrBindGroup.create(a.createBindGroup(n))},wgpuDeviceCreateBuffer:function(e,r){A(r),A(0===N[r>>2]);var t=0!==B[r+24>>0],n={label:void 0,usage:N[r+8>>2],size:4294967296*N[r+4+16>>2]+N[r+16>>2],mappedAtCreation:t},o=N[r+4>>2];o&&(n.label=z(o));var a=qt.mgrDevice.get(e),i={},s=qt.mgrBuffer.create(a.createBuffer(n),i);return t&&(i.mapMode=2,i.onUnmap=[]),s},wgpuDeviceCreateCommandEncoder:function(e,r){var t;if(r){A(r),A(0===N[r>>2]),t={label:void 0};var n=N[r+4>>2];n&&(t.label=z(n))}var o=qt.mgrDevice.get(e);return qt.mgrCommandEncoder.create(o.createCommandEncoder(t))},wgpuDeviceCreateComputePipeline:function(e,r){A(r),A(0===N[r>>2]);var t={label:void 0,layout:qt.mgrPipelineLayout.get(N[r+8>>2]),compute:qt.makeProgrammableStageDescriptor(r+12)},n=N[r+4>>2];n&&(t.label=z(n));var o=qt.mgrDevice.get(e);return qt.mgrComputePipeline.create(o.createComputePipeline(t))},wgpuDeviceCreateRenderPipeline:function(e,r){function t(e){if(e)return{operation:qt.BlendOperation[N[e>>2]],srcFactor:qt.BlendFactor[N[e+4>>2]],dstFactor:qt.BlendFactor[N[e+8>>2]]}}function n(e){if(e)return A(e),A(0===N[e>>2]),{alpha:t(e+12),color:t(e+0)}}function o(e){A(e),A(0===N[e>>2]);var r=N[e+4>>2];return 0===r?void 0:{format:qt.TextureFormat[r],blend:n(N[e+8>>2]),writeMask:N[e+12>>2]}}function a(e,r){for(var t=[],n=0;n>2]],failOp:qt.StencilOperation[N[e+4>>2]],depthFailOp:qt.StencilOperation[N[e+8>>2]],passOp:qt.StencilOperation[N[e+12>>2]]}}function s(e,r){for(var t,n=[],o=0;o>2]],offset:4294967296*N[t+4+8>>2]+N[t+8>>2],shaderLocation:N[t+16>>2]}));return n}function u(e){if(e){var r=N[e+8>>2];return 2===r?null:{arrayStride:4294967296*N[e+4>>2]+N[e>>2],stepMode:qt.VertexStepMode[r],attributes:s(N[e+12>>2],N[e+16>>2])}}}function c(e,r){if(e){for(var t=[],n=0;n>2]);var l={label:void 0,layout:qt.mgrPipelineLayout.get(N[r+8>>2]),vertex:function(e){if(e)return A(e),A(0===N[e>>2]),{module:qt.mgrShaderModule.get(N[e+4>>2]),entryPoint:z(N[e+8>>2]),constants:qt.makePipelineConstants(N[e+12>>2],N[e+16>>2]),buffers:c(N[e+20>>2],N[e+24>>2])}}(r+12),primitive:function(e){if(e)return A(e),A(0===N[e>>2]),{topology:qt.PrimitiveTopology[N[e+4>>2]],stripIndexFormat:qt.IndexFormat[N[e+8>>2]],frontFace:qt.FrontFace[N[e+12>>2]],cullMode:qt.CullMode[N[e+16>>2]]}}(r+40),depthStencil:function(e){if(e)return A(e),{format:qt.TextureFormat[N[e+4>>2]],depthWriteEnabled:0!==B[e+8>>0],depthCompare:qt.CompareFunction[N[e+12>>2]],stencilFront:i(e+16),stencilBack:i(e+32),stencilReadMask:N[e+48>>2],stencilWriteMask:N[e+52>>2],depthBias:N[e+56>>2],depthBiasSlopeScale:j[e+60>>2],depthBiasClamp:j[e+64>>2]}}(N[r+60>>2]),multisample:function(e){if(e)return A(e),A(0===N[e>>2]),{count:N[e+4>>2],mask:N[e+8>>2],alphaToCoverageEnabled:0!==B[e+12>>0]}}(r+64),fragment:function(e){if(e)return A(e),A(0===N[e>>2]),{module:qt.mgrShaderModule.get(N[e+4>>2]),entryPoint:z(N[e+8>>2]),constants:qt.makePipelineConstants(N[e+12>>2],N[e+16>>2]),targets:a(N[e+20>>2],N[e+24>>2])}}(N[r+80>>2])},d=N[r+4>>2];d&&(l.label=z(d));var f=qt.mgrDevice.get(e);return qt.mgrRenderPipeline.create(f.createRenderPipeline(l))},wgpuDeviceCreateSampler:function(e,r){A(r),A(0===N[r>>2]);var t={label:void 0,addressModeU:qt.AddressMode[N[r+8>>2]],addressModeV:qt.AddressMode[N[r+12>>2]],addressModeW:qt.AddressMode[N[r+16>>2]],magFilter:qt.FilterMode[N[r+20>>2]],minFilter:qt.FilterMode[N[r+24>>2]],mipmapFilter:qt.FilterMode[N[r+28>>2]],lodMinClamp:j[r+32>>2],lodMaxClamp:j[r+36>>2],compare:qt.CompareFunction[N[r+40>>2]]},n=N[r+4>>2];n&&(t.label=z(n));var o=qt.mgrDevice.get(e);return qt.mgrSampler.create(o.createSampler(t))},wgpuDeviceCreateShaderModule:function(e,r){A(r);var t=N[r>>2];A(0!==t);var n=N[t+4>>2],o={label:void 0,code:""},a=N[r+4>>2];switch(a&&(o.label=z(a)),n){case 5:var i=N[t+8>>2],s=N[t+12>>2];o.code=N.subarray(s>>2,(s>>2)+i);break;case 6:var u=N[t+8>>2];u&&(o.code=z(u));break;default:de("unrecognized ShaderModule sType")}var c=qt.mgrDevice.get(e);return qt.mgrShaderModule.create(c.createShaderModule(o))},wgpuDeviceCreateTexture:function(e,r){A(r),A(0===N[r>>2]);var t={label:void 0,size:qt.makeExtent3D(r+16),mipLevelCount:N[r+32>>2],sampleCount:N[r+36>>2],dimension:qt.TextureDimension[N[r+12>>2]],format:qt.TextureFormat[N[r+28>>2]],usage:N[r+8>>2]},n=N[r+4>>2];n&&(t.label=z(n));var o=N[r+40>>2];if(o){var a=N[r+44>>2];t.viewFormats=Array.from(I.subarray(a>>2,(a>>2)+o),(function(e){return qt.TextureFormat[e]}))}var i=qt.mgrDevice.get(e);return qt.mgrTexture.create(i.createTexture(t))},wgpuDeviceGetQueue:function(e){var r=qt.mgrDevice.objects[e].queueId;return A(r,"wgpuDeviceGetQueue: queue was missing or null"),qt.mgrQueue.reference(r),r},wgpuDeviceReference:function(e){qt.mgrDevice.reference(e)},wgpuDeviceRelease:function(e){qt.mgrDevice.release(e)},wgpuPipelineLayoutRelease:function(e){qt.mgrPipelineLayout.release(e)},wgpuQuerySetRelease:function(e){qt.mgrQuerySet.release(e)},wgpuQueueRelease:function(e){qt.mgrQueue.release(e)},wgpuQueueSubmit:function(e,r,t){A(t%4==0);var n=qt.mgrQueue.get(e),o=Array.from(I.subarray(t>>2,(t>>2)+r),(function(e){return qt.mgrCommandBuffer.get(e)}));n.submit(o)},wgpuQueueWriteBuffer:function(e,r,t,n,o,a){var i=qt.mgrQueue.get(e),s=qt.mgrBuffer.get(r),u=(A(n<2097152),4294967296*n+t),c=M.subarray(o,o+a);i.writeBuffer(s,u,c,0,a)},wgpuRenderPassEncoderDraw:function(e,r,t,n,o){qt.mgrRenderPassEncoder.get(e).draw(r,t,n,o)},wgpuRenderPassEncoderEnd:function(e){qt.mgrRenderPassEncoder.get(e).end()},wgpuRenderPassEncoderRelease:function(e){qt.mgrRenderPassEncoder.release(e)},wgpuRenderPassEncoderSetBindGroup:function(e,r,t,n,o){var a=qt.mgrRenderPassEncoder.get(e),i=qt.mgrBindGroup.get(t);if(0==n)a.setBindGroup(r,i);else{for(var s=[],u=0;u>2]);a.setBindGroup(r,i,s)}},wgpuRenderPassEncoderSetPipeline:function(e,r){var t=qt.mgrRenderPassEncoder.get(e),n=qt.mgrRenderPipeline.get(r);t.setPipeline(n)},wgpuRenderPipelineGetBindGroupLayout:function(e,r){var t=qt.mgrRenderPipeline.get(e);return qt.mgrBindGroupLayout.create(t.getBindGroupLayout(r))},wgpuRenderPipelineRelease:function(e){qt.mgrRenderPipeline.release(e)},wgpuSamplerReference:function(e){qt.mgrSampler.reference(e)},wgpuSamplerRelease:function(e){qt.mgrSampler.release(e)},wgpuShaderModuleReference:function(e){qt.mgrShaderModule.reference(e)},wgpuShaderModuleRelease:function(e){qt.mgrShaderModule.release(e)},wgpuTextureCreateView:function(e,r){var t;if(r){A(r),A(0===N[r>>2]);var n=N[r+20>>2],o=N[r+28>>2];t={format:qt.TextureFormat[N[r+8>>2]],dimension:qt.TextureViewDimension[N[r+12>>2]],baseMipLevel:N[r+16>>2],mipLevelCount:4294967295===n?void 0:n,baseArrayLayer:N[r+24>>2],arrayLayerCount:4294967295===o?void 0:o,aspect:qt.TextureAspect[N[r+32>>2]]};var a=N[r+4>>2];a&&(t.label=z(a))}var i=qt.mgrTexture.get(e);return qt.mgrTextureView.create(i.createView(t))},wgpuTextureDestroy:function(e){qt.mgrTexture.get(e).destroy()},wgpuTextureReference:function(e){qt.mgrTexture.reference(e)},wgpuTextureRelease:function(e){qt.mgrTexture.release(e)},wgpuTextureViewReference:function(e){qt.mgrTextureView.reference(e)},wgpuTextureViewRelease:function(e){qt.mgrTextureView.release(e)}},En=(function(){var e={env:_n,wasi_snapshot_preview1:_n};function r(e,r){var t,n=e.exports;o.asm=n,A(P=o.asm.memory,"memory not found in wasm exports"),q(P.buffer),A(X=o.asm.__indirect_function_table,"table not found in wasm exports"),t=o.asm.__wasm_call_ctors,Z.unshift(t),le("wasm-instantiate")}ce("wasm-instantiate");var t=o;function a(e){A(o===t,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),t=null,r(e.instance)}function i(r){return function(){if(!x&&(c||l)){if("function"==typeof fetch&&!ye(fe))return fetch(fe,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+fe+"'";return e.arrayBuffer()})).catch((function(){return we(fe)}));if(p)return new Promise((function(e,r){p(fe,(function(r){e(new Uint8Array(r))}),r)}))}return Promise.resolve().then((function(){return we(fe)}))}().then((function(r){return WebAssembly.instantiate(r,e)})).then((function(e){return e})).then(r,(function(e){E("failed to asynchronously prepare wasm: "+e),ye(fe)&&E("warning: Loading from a file URI ("+fe+") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing"),de(e)}))}if(o.instantiateWasm)try{return o.instantiateWasm(e,r)}catch(e){E("Module.instantiateWasm callback failed with error: "+e),n(e)}(x||"function"!=typeof WebAssembly.instantiateStreaming||he(fe)||ye(fe)||d||"function"!=typeof fetch?i(a):fetch(fe,{credentials:"same-origin"}).then((function(r){return WebAssembly.instantiateStreaming(r,e).then(a,(function(e){return E("wasm streaming compile failed: "+e),E("falling back to ArrayBuffer instantiation"),i(a)}))}))).catch(n)}(),o.___wasm_call_ctors=be("__wasm_call_ctors"),o._malloc=be("malloc")),xn=o._free=be("free"),Cn=o.___errno_location=be("__errno_location"),Tn=o._fflush=be("fflush"),Sn=o.___getTypeName=be("__getTypeName"),Pn=(o.__embind_initialize_bindings=be("_embind_initialize_bindings"),o.___dl_seterr=be("__dl_seterr"),o._emscripten_builtin_memalign=be("emscripten_builtin_memalign")),kn=o._emscripten_stack_init=function(){return(kn=o._emscripten_stack_init=o.asm.emscripten_stack_init).apply(null,arguments)},Fn=(o._emscripten_stack_get_free=function(){return(o._emscripten_stack_get_free=o.asm.emscripten_stack_get_free).apply(null,arguments)},o._emscripten_stack_get_base=function(){return(o._emscripten_stack_get_base=o.asm.emscripten_stack_get_base).apply(null,arguments)},o._emscripten_stack_get_end=function(){return(Fn=o._emscripten_stack_get_end=o.asm.emscripten_stack_get_end).apply(null,arguments)}),Ln=(o.stackSave=be("stackSave"),o.stackRestore=be("stackRestore"),o.stackAlloc=be("stackAlloc"),o._emscripten_stack_get_current=function(){return(Ln=o._emscripten_stack_get_current=o.asm.emscripten_stack_get_current).apply(null,arguments)}),An=o.___cxa_is_pointer_type=be("__cxa_is_pointer_type");o.dynCall_jii=be("dynCall_jii"),o.dynCall_iiiijij=be("dynCall_iiiijij"),o.dynCall_ji=be("dynCall_ji"),o.dynCall_viji=be("dynCall_viji"),o.dynCall_jjj=be("dynCall_jjj"),o.dynCall_jiii=be("dynCall_jiii"),o.dynCall_iiiijj=be("dynCall_iiiijj"),o.dynCall_viijj=be("dynCall_viijj"),o.dynCall_viiijjj=be("dynCall_viiijjj"),o.dynCall_vij=be("dynCall_vij"),o.dynCall_viijii=be("dynCall_viijii"),o.dynCall_vijjj=be("dynCall_vijjj"),o.dynCall_vj=be("dynCall_vj"),o.dynCall_viij=be("dynCall_viij"),o.dynCall_viiiiij=be("dynCall_viiiiij"),o.dynCall_iijjiiii=be("dynCall_iijjiiii"),o.dynCall_jiji=be("dynCall_jiji"),o.dynCall_iiiiij=be("dynCall_iiiiij"),o.dynCall_iiiiijj=be("dynCall_iiiiijj"),o.dynCall_iiiiiijj=be("dynCall_iiiiiijj"),o.___start_em_js=515059,o.___stop_em_js=515579;o.addRunDependency=ce,o.removeRunDependency=le,o.FS_createPath=Oe.createPath,o.FS_createDataFile=Oe.createDataFile,o.FS_createPreloadedFile=Oe.createPreloadedFile,o.FS_createLazyFile=Oe.createLazyFile,o.FS_createDevice=Oe.createDevice,o.FS_unlink=Oe.unlink,o.GL=Ut;["run","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","addOnPreRun","addOnInit","addOnPreMain","addOnExit","addOnPostRun","FS_createFolder","FS_createLink","getLEB","getFunctionTables","alignFunctionTables","registerFunctions","prettyPrint","getCompilerSetting","out","err","callMain","abort","keepRuntimeAlive","wasmMemory","stackAlloc","stackSave","stackRestore","getTempRet0","setTempRet0","writeStackCookie","checkStackCookie","ptrToString","zeroMemory","stringToNewUTF8","exitJS","getHeapMax","emscripten_realloc_buffer","ENV","ERRNO_CODES","ERRNO_MESSAGES","setErrNo","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","DNS","getHostByName","Protocols","Sockets","getRandomDevice","warnOnce","traverseStack","UNWIND_CACHE","convertPCtoSourceLocation","readEmAsmArgsArray","readEmAsmArgs","runEmAsmFunction","runMainThreadEmAsm","jstoi_q","jstoi_s","getExecutableName","listenOnce","autoResumeAudioContext","dynCallLegacy","getDynCaller","dynCall","handleException","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","safeSetTimeout","asmjsMangle","asyncLoad","alignMemory","mmapAlloc","writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","getCFunc","ccall","cwrap","uleb128Encode","sigToWasmTypes","generateFuncType","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","addFunction","removeFunction","reallyNegative","unSign","strLen","reSign","formatString","setValue","getValue","PATH","PATH_FS","intArrayFromString","intArrayToString","AsciiToString","stringToAscii","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","allocateUTF8","allocateUTF8OnStack","writeStringToMemory","writeArrayToMemory","writeAsciiToMemory","SYSCALLS","getSocketFromFD","getSocketAddress","JSEvents","registerKeyEventCallback","specialHTMLTargets","findEventTarget","findCanvasEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","currentFullscreenStrategy","restoreOldWindowedStyle","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","battery","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","demangle","demangleAll","jsStackTrace","stackTrace","ExitStatus","getEnvStrings","checkWasiClock","doReadv","doWritev","dlopenMissingError","createDyncallWrapper","setImmediateWrapped","clearImmediateWrapped","polyfillSetImmediate","uncaughtExceptionCount","exceptionLast","exceptionCaught","ExceptionInfo","exception_addRef","exception_decRef","Browser","setMainLoop","wget","FS","MEMFS","TTY","PIPEFS","SOCKFS","_setNetworkCallback","tempFixedLengthArray","miniTempWebGLFloatBuffers","heapObjectForWebGLType","heapAccessShiftForWebGLHeap","emscriptenWebGLGet","computeUnpackAlignedImageSize","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","emscriptenWebGLGetBufferBinding","emscriptenWebGLValidateMapBufferTarget","writeGLArray","AL","SDL_unicode","SDL_ttfContext","SDL_audio","SDL","SDL_gfx","GLUT","EGL","GLFW_Window","GLFW","GLEW","IDBStore","runAndAbortIfError","emscriptenWebGLGetIndexed","WebGPU","JsValStore","ALLOC_NORMAL","ALLOC_STACK","allocate","InternalError","BindingError","UnboundTypeError","PureVirtualError","init_embind","throwInternalError","throwBindingError","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","extendError","createNamedFunction","embindRepr","registeredInstances","getBasestPointer","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","registeredTypes","awaitingDependencies","typeDependencies","registeredPointers","registerType","whenDependentTypesAreResolved","embind_charCodes","embind_init_charCodes","readLatin1String","getTypeName","heap32VectorToArray","requireRegisteredType","getShiftFromSize","integerReadValueFromPointer","enumReadValueFromPointer","floatReadValueFromPointer","simpleReadValueFromPointer","runDestructors","new_","craftInvokerFunction","embind__requireFunction","tupleRegistrations","structRegistrations","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_getPointee","RegisteredPointer_destructor","RegisteredPointer_deleteObject","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","ClassHandle_isAliasOf","throwInstanceAlreadyDeleted","ClassHandle_clone","ClassHandle_delete","deletionQueue","ClassHandle_isDeleted","ClassHandle_deleteLater","flushPendingDeletes","delayFunction","setDelayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","validateThis","char_0","char_9","makeLegalFunctionName","emval_handle_array","emval_free_list","emval_symbols","init_emval","count_emval_handles","get_first_emval","getStringOrSymbol","Emval","emval_newers","craftEmvalAllocator","emval_get_global","emval_lookupTypes","emval_allocateDestructors","emval_methodCallers","emval_addMethodCaller","emval_registeredMethods"].forEach((function(e){Object.getOwnPropertyDescriptor(o,e)||Object.defineProperty(o,e,{configurable:!0,get:function(){var r="'"+e+"' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)";S(e)&&(r+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),de(r)}})}));var Dn;function Bn(){var e;kn(),A(0==(3&(e=Fn()))),0==e&&(e+=4),N[e>>2]=34821223,N[e+4>>2]=2310721022,N[0]=1668509029}function Mn(e){function r(){Dn||(Dn=!0,o.calledRun=!0,L||(A(!te),te=!0,K(),o.noFSInit||Oe.init.initialized||Oe.init(),Oe.ignorePermissions=!1,Fe.init(),ze(Z),t(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),A(!o._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),function(){if(K(),o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)e=o.postRun.shift(),re.unshift(e);var e;ze(re)}()))}e=e||i,oe>0||(Bn(),function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)e=o.preRun.shift(),J.unshift(e);var e;ze(J)}(),oe>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),r()}),1)):r(),K()))}if(["inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","getHostByName","traverseStack","convertPCtoSourceLocation","runMainThreadEmAsm","jstoi_s","listenOnce","autoResumeAudioContext","runtimeKeepalivePush","runtimeKeepalivePop","asmjsMangle","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","convertU32PairToI53","getCFunc","ccall","cwrap","uleb128Encode","sigToWasmTypes","generateFuncType","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","addFunction","removeFunction","reallyNegative","unSign","strLen","reSign","formatString","intArrayToString","AsciiToString","stringToAscii","allocateUTF8OnStack","writeStringToMemory","getSocketFromFD","getSocketAddress","registerKeyEventCallback","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","battery","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","stackTrace","checkWasiClock","createDyncallWrapper","setImmediateWrapped","clearImmediateWrapped","polyfillSetImmediate","exception_addRef","exception_decRef","_setNetworkCallback","emscriptenWebGLGetUniform","emscriptenWebGLGetVertexAttrib","emscriptenWebGLGetBufferBinding","emscriptenWebGLValidateMapBufferTarget","writeGLArray","SDL_unicode","SDL_ttfContext","SDL_audio","GLFW_Window","runAndAbortIfError","emscriptenWebGLGetIndexed","ALLOC_NORMAL","ALLOC_STACK","allocate","enumReadValueFromPointer","craftEmvalAllocator"].forEach((function(e){"undefined"==typeof globalThis||Object.getOwnPropertyDescriptor(globalThis,e)||Object.defineProperty(globalThis,e,{configurable:!0,get:function(){var r="`"+e+"` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line",t=e;t.startsWith("_")||(t="$"+e),r+=" (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE="+t+")",S(e)&&(r+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),Ve(r)}})})),ie=function e(){Dn||Mn(),Dn||(ie=e)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return Mn(),r.ready}})();"object"==typeof exports&&"object"==typeof module?module.exports=createMediapipeSolutionsWasm:"function"==typeof define&&define.amd?define([],(function(){return createMediapipeSolutionsWasm})):"object"==typeof exports&&(exports.createMediapipeSolutionsWasm=createMediapipeSolutionsWasm); \ No newline at end of file diff --git a/build/assets/selfieSegmentation/selfie_segmentation_solution_wasm_bin.wasm b/build/assets/selfieSegmentation/selfie_segmentation_solution_wasm_bin.wasm new file mode 100644 index 0000000..61d9c18 Binary files /dev/null and b/build/assets/selfieSegmentation/selfie_segmentation_solution_wasm_bin.wasm differ diff --git a/build/assets/sounds/beep.mp3 b/build/assets/sounds/beep.mp3 new file mode 100644 index 0000000..77699bf Binary files /dev/null and b/build/assets/sounds/beep.mp3 differ diff --git a/build/assets/sounds/beep2.mp3 b/build/assets/sounds/beep2.mp3 new file mode 100644 index 0000000..6546bba Binary files /dev/null and b/build/assets/sounds/beep2.mp3 differ diff --git a/build/assets/temp-logo.png b/build/assets/temp-logo.png new file mode 100644 index 0000000..e001bf6 Binary files /dev/null and b/build/assets/temp-logo.png differ diff --git a/build/assets/temp-logok.png b/build/assets/temp-logok.png new file mode 100644 index 0000000..5b481d5 Binary files /dev/null and b/build/assets/temp-logok.png differ diff --git a/build/assets/temp-logon.png b/build/assets/temp-logon.png new file mode 100644 index 0000000..107c703 Binary files /dev/null and b/build/assets/temp-logon.png differ diff --git a/build/assets/temp-logor.png b/build/assets/temp-logor.png new file mode 100644 index 0000000..29c7af0 Binary files /dev/null and b/build/assets/temp-logor.png differ diff --git a/build/assets/temp/designsystem.webp b/build/assets/temp/designsystem.webp new file mode 100644 index 0000000..e6f58fd Binary files /dev/null and b/build/assets/temp/designsystem.webp differ diff --git a/build/assets/temp/figma.webp b/build/assets/temp/figma.webp new file mode 100644 index 0000000..450aea9 Binary files /dev/null and b/build/assets/temp/figma.webp differ diff --git a/build/assets/temp/marketing.webp b/build/assets/temp/marketing.webp new file mode 100644 index 0000000..dd8b12e Binary files /dev/null and b/build/assets/temp/marketing.webp differ diff --git a/build/assets/temp/substack.webp b/build/assets/temp/substack.webp new file mode 100644 index 0000000..7ec47e3 Binary files /dev/null and b/build/assets/temp/substack.webp differ diff --git a/build/assets/temp/twitter.webp b/build/assets/temp/twitter.webp new file mode 100644 index 0000000..332da43 Binary files /dev/null and b/build/assets/temp/twitter.webp differ diff --git a/build/assets/tool-icons/alert-icon.svg b/build/assets/tool-icons/alert-icon.svg new file mode 100644 index 0000000..2f5d0a3 --- /dev/null +++ b/build/assets/tool-icons/alert-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/tool-icons/arrow-icon.svg b/build/assets/tool-icons/arrow-icon.svg new file mode 100644 index 0000000..15f16d2 --- /dev/null +++ b/build/assets/tool-icons/arrow-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/audio-icon.svg b/build/assets/tool-icons/audio-icon.svg new file mode 100644 index 0000000..f9e8f39 --- /dev/null +++ b/build/assets/tool-icons/audio-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/tool-icons/blur-icon.svg b/build/assets/tool-icons/blur-icon.svg new file mode 100644 index 0000000..04f6cb7 --- /dev/null +++ b/build/assets/tool-icons/blur-icon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/build/assets/tool-icons/camera-icon.svg b/build/assets/tool-icons/camera-icon.svg new file mode 100644 index 0000000..3a635d9 --- /dev/null +++ b/build/assets/tool-icons/camera-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/circle-filled-icon.svg b/build/assets/tool-icons/circle-filled-icon.svg new file mode 100644 index 0000000..08f2686 --- /dev/null +++ b/build/assets/tool-icons/circle-filled-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/circle-icon.svg b/build/assets/tool-icons/circle-icon.svg new file mode 100644 index 0000000..e964912 --- /dev/null +++ b/build/assets/tool-icons/circle-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/close-button.svg b/build/assets/tool-icons/close-button.svg new file mode 100644 index 0000000..3d8584f --- /dev/null +++ b/build/assets/tool-icons/close-button.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/comment-icon.svg b/build/assets/tool-icons/comment-icon.svg new file mode 100644 index 0000000..3ac6417 --- /dev/null +++ b/build/assets/tool-icons/comment-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/cursor-icon.svg b/build/assets/tool-icons/cursor-icon.svg new file mode 100644 index 0000000..5fd8544 --- /dev/null +++ b/build/assets/tool-icons/cursor-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/discard-icon.svg b/build/assets/tool-icons/discard-icon.svg new file mode 100644 index 0000000..925d058 --- /dev/null +++ b/build/assets/tool-icons/discard-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/draw-icon.svg b/build/assets/tool-icons/draw-icon.svg new file mode 100644 index 0000000..fded6b7 --- /dev/null +++ b/build/assets/tool-icons/draw-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/tool-icons/drawing-icon.svg b/build/assets/tool-icons/drawing-icon.svg new file mode 100644 index 0000000..6a837ef --- /dev/null +++ b/build/assets/tool-icons/drawing-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/eraser-icon.svg b/build/assets/tool-icons/eraser-icon.svg new file mode 100644 index 0000000..56da89f --- /dev/null +++ b/build/assets/tool-icons/eraser-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/tool-icons/eyedropper-icon.svg b/build/assets/tool-icons/eyedropper-icon.svg new file mode 100644 index 0000000..239942f --- /dev/null +++ b/build/assets/tool-icons/eyedropper-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/grab-icon.svg b/build/assets/tool-icons/grab-icon.svg new file mode 100644 index 0000000..ac39ae4 --- /dev/null +++ b/build/assets/tool-icons/grab-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/build/assets/tool-icons/help-icon.svg b/build/assets/tool-icons/help-icon.svg new file mode 100644 index 0000000..e5be3d9 --- /dev/null +++ b/build/assets/tool-icons/help-icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/build/assets/tool-icons/hide-cursor-icon.svg b/build/assets/tool-icons/hide-cursor-icon.svg new file mode 100644 index 0000000..b8559a7 --- /dev/null +++ b/build/assets/tool-icons/hide-cursor-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/tool-icons/highlight-cursor-icon.svg b/build/assets/tool-icons/highlight-cursor-icon.svg new file mode 100644 index 0000000..8bff232 --- /dev/null +++ b/build/assets/tool-icons/highlight-cursor-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/assets/tool-icons/highlighter-icon.svg b/build/assets/tool-icons/highlighter-icon.svg new file mode 100644 index 0000000..60bcb69 --- /dev/null +++ b/build/assets/tool-icons/highlighter-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/tool-icons/image-icon.svg b/build/assets/tool-icons/image-icon.svg new file mode 100644 index 0000000..7fa0bf9 --- /dev/null +++ b/build/assets/tool-icons/image-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/assets/tool-icons/mic-icon.svg b/build/assets/tool-icons/mic-icon.svg new file mode 100644 index 0000000..54839ec --- /dev/null +++ b/build/assets/tool-icons/mic-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/tool-icons/more-icon.svg b/build/assets/tool-icons/more-icon.svg new file mode 100644 index 0000000..8ed8043 --- /dev/null +++ b/build/assets/tool-icons/more-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/not-supported-icon.svg b/build/assets/tool-icons/not-supported-icon.svg new file mode 100644 index 0000000..dbcf612 --- /dev/null +++ b/build/assets/tool-icons/not-supported-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/assets/tool-icons/pause-icon.svg b/build/assets/tool-icons/pause-icon.svg new file mode 100644 index 0000000..95ab44c --- /dev/null +++ b/build/assets/tool-icons/pause-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/record-icon.svg b/build/assets/tool-icons/record-icon.svg new file mode 100644 index 0000000..eb25d7e --- /dev/null +++ b/build/assets/tool-icons/record-icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/build/assets/tool-icons/rectangle-filled-icon.svg b/build/assets/tool-icons/rectangle-filled-icon.svg new file mode 100644 index 0000000..14d9bad --- /dev/null +++ b/build/assets/tool-icons/rectangle-filled-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/rectangle-icon.svg b/build/assets/tool-icons/rectangle-icon.svg new file mode 100644 index 0000000..fae8997 --- /dev/null +++ b/build/assets/tool-icons/rectangle-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/redo-icon.svg b/build/assets/tool-icons/redo-icon.svg new file mode 100644 index 0000000..3b393a8 --- /dev/null +++ b/build/assets/tool-icons/redo-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/restart-icon.svg b/build/assets/tool-icons/restart-icon.svg new file mode 100644 index 0000000..6a2f1ec --- /dev/null +++ b/build/assets/tool-icons/restart-icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/build/assets/tool-icons/resume-icon.svg b/build/assets/tool-icons/resume-icon.svg new file mode 100644 index 0000000..4bb53f3 --- /dev/null +++ b/build/assets/tool-icons/resume-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/spotlight-cursor-icon.svg b/build/assets/tool-icons/spotlight-cursor-icon.svg new file mode 100644 index 0000000..33a4352 --- /dev/null +++ b/build/assets/tool-icons/spotlight-cursor-icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/build/assets/tool-icons/stop-icon.svg b/build/assets/tool-icons/stop-icon.svg new file mode 100644 index 0000000..419084f --- /dev/null +++ b/build/assets/tool-icons/stop-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/tool-icons/stroke-1-icon.svg b/build/assets/tool-icons/stroke-1-icon.svg new file mode 100644 index 0000000..5e44afd --- /dev/null +++ b/build/assets/tool-icons/stroke-1-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/stroke-2-icon.svg b/build/assets/tool-icons/stroke-2-icon.svg new file mode 100644 index 0000000..18e01e9 --- /dev/null +++ b/build/assets/tool-icons/stroke-2-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/stroke-3-icon.svg b/build/assets/tool-icons/stroke-3-icon.svg new file mode 100644 index 0000000..c582339 --- /dev/null +++ b/build/assets/tool-icons/stroke-3-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/target-cursor-icon.svg b/build/assets/tool-icons/target-cursor-icon.svg new file mode 100644 index 0000000..b6c6c1d --- /dev/null +++ b/build/assets/tool-icons/target-cursor-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/assets/tool-icons/text-icon.svg b/build/assets/tool-icons/text-icon.svg new file mode 100644 index 0000000..57cb47f --- /dev/null +++ b/build/assets/tool-icons/text-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/time-icon.svg b/build/assets/tool-icons/time-icon.svg new file mode 100644 index 0000000..f771aed --- /dev/null +++ b/build/assets/tool-icons/time-icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/build/assets/tool-icons/transform-icon.svg b/build/assets/tool-icons/transform-icon.svg new file mode 100644 index 0000000..457b486 --- /dev/null +++ b/build/assets/tool-icons/transform-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/tool-icons/trash-icon.svg b/build/assets/tool-icons/trash-icon.svg new file mode 100644 index 0000000..c61605d --- /dev/null +++ b/build/assets/tool-icons/trash-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/triangle-filled-icon.svg b/build/assets/tool-icons/triangle-filled-icon.svg new file mode 100644 index 0000000..0992cd4 --- /dev/null +++ b/build/assets/tool-icons/triangle-filled-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/triangle-icon.svg b/build/assets/tool-icons/triangle-icon.svg new file mode 100644 index 0000000..5b0edc0 --- /dev/null +++ b/build/assets/tool-icons/triangle-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/tool-icons/undo-icon.svg b/build/assets/tool-icons/undo-icon.svg new file mode 100644 index 0000000..706836a --- /dev/null +++ b/build/assets/tool-icons/undo-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/assets/twitter-logo.svg b/build/assets/twitter-logo.svg new file mode 100644 index 0000000..d738d35 --- /dev/null +++ b/build/assets/twitter-logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/build/assets/vendor/ffmpeg-core.js b/build/assets/vendor/ffmpeg-core.js new file mode 100644 index 0000000..2cea1c9 --- /dev/null +++ b/build/assets/vendor/ffmpeg-core.js @@ -0,0 +1 @@ +var createFFmpegCore=function(){var e="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0;return"undefined"!=typeof __filename&&(e=e||__filename),function(t){var n,r,i;t=t||{},n||(n=void 0!==t?t:{}),n.ready=new Promise((function(e,t){r=e,i=t}));var o,a={};for(o in n)n.hasOwnProperty(o)&&(a[o]=n[o]);var f=[],u="./this.program";function c(e,t){throw t}var s,l=!1,d=!1,h=!1;l="object"==typeof window,d="function"==typeof importScripts,h="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,s=!l&&!h&&!d;var p=n.ENVIRONMENT_IS_PTHREAD||!1;p&&(G=n.buffer);var m,g,w,y,v="";function b(e){return n.locateFile?n.locateFile(e,v):v+e}if(h){var _;v=d?require("path").dirname(v)+"/":__dirname+"/",m=function(e,t){return w||(w=require("fs")),y||(y=require("path")),e=y.normalize(e),w.readFileSync(e,t?null:"utf8")},g=function(e){return(e=m(e,!0)).buffer||(e=new Uint8Array(e)),F(e.buffer),e},1=n);){var i=e[t++];if(!i)break;if(128&i){var o=63&e[t++];if(192==(224&i))r+=String.fromCharCode((31&i)<<6|o);else{var a=63&e[t++];65536>(i=224==(240&i)?(15&i)<<12|o<<6|a:(7&i)<<18|o<<12|a<<6|63&e[t++])?r+=String.fromCharCode(i):(i-=65536,r+=String.fromCharCode(55296|i>>10,56320|1023&i))}}else r+=String.fromCharCode(i)}return r}function L(e,t){return e?P(q,e,t):""}function R(e,t,n,r){if(!(0=a)a=65536+((1023&a)<<10)|1023&e.charCodeAt(++o);if(127>=a){if(n>=r)break;t[n++]=a}else{if(2047>=a){if(n+1>=r)break;t[n++]=192|a>>6}else{if(65535>=a){if(n+2>=r)break;t[n++]=224|a>>12}else{if(n+3>=r)break;t[n++]=240|a>>18,t[n++]=128|a>>12&63}t[n++]=128|a>>6&63}t[n++]=128|63&a}}return t[n]=0,n-i}function N(e){for(var t=0,n=0;n=r&&(r=65536+((1023&r)<<10)|1023&e.charCodeAt(++n)),127>=r?++t:t=2047>=r?t+2:65535>=r?t+3:t+4}return t}function B(e){var t=N(e)+1,n=Hn(t);return n&&R(e,W,n,t),n}function U(e){var t=N(e)+1,n=ar(t);return R(e,W,n,t),n}function z(e,t,n){for(var r=0;r>0]=e.charCodeAt(r);n||(W[t>>0]=0)}var G,W,q,H,Y,X,V,Q,J,Z=n.INITIAL_MEMORY||2146435072;if(p)$=n.wasmMemory,G=n.buffer;else if(n.wasmMemory)$=n.wasmMemory;else if(!(($=new WebAssembly.Memory({initial:Z/65536,maximum:Z/65536,shared:!0})).buffer instanceof SharedArrayBuffer))throw A("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),h&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");$&&(G=$.buffer),Z=G.byteLength;var K=G;G=K,n.HEAP8=W=new Int8Array(K),n.HEAP16=H=new Int16Array(K),n.HEAP32=X=new Int32Array(K),n.HEAPU8=q=new Uint8Array(K),n.HEAPU16=Y=new Uint16Array(K),n.HEAPU32=V=new Uint32Array(K),n.HEAPF32=Q=new Float32Array(K),n.HEAPF64=J=new Float64Array(K);var ee,te=[],ne=[],re=[],ie=[],oe=[];function ae(){var e=n.preRun.shift();te.unshift(e)}var fe=0,ue=null,ce=null;function se(){F(!p,"addRunDependency cannot be used in a pthread worker"),fe++,n.monitorRunDependencies&&n.monitorRunDependencies(fe)}function le(){if(fe--,n.monitorRunDependencies&&n.monitorRunDependencies(fe),0==fe&&(null!==ue&&(clearInterval(ue),ue=null),ce)){var e=ce;ce=null,e()}}function de(e){throw n.onAbort&&n.onAbort(e),p&&console.error("Pthread aborting at "+Error().stack),A(e),C=!0,e=new WebAssembly.RuntimeError("abort("+e+"). Build with -s ASSERTIONS=1 for more info."),i(e),e}function he(e){var t=me;return String.prototype.startsWith?t.startsWith(e):0===t.indexOf(e)}function pe(){return he("data:application/octet-stream;base64,")}n.preloadedImages={},n.preloadedAudios={};var me="ffmpeg-core.wasm";function ge(){try{if(E)return new Uint8Array(E);if(g)return g(me);throw"both async and sync fetching of the wasm failed"}catch(e){de(e)}}pe()||(me=b(me));var we,ye,ve={5244604:function(){throw"Canceled!"},5244824:function(e,t){setTimeout((function(){lr(e,t)}),0)},5244926:function(){return 5242880}};function be(e){for(;0=e||e>W.length||1&e||0>t)return-28;if(0==t)return 0;2147483647<=t&&(t=1/0);var n=Atomics.load(X,Me.Uf>>2),r=0;if(n==e&&Atomics.compareExchange(X,Me.Uf>>2,n,0)==n&&(r=1,0>=--t))return 1;if(0<=(e=Atomics.notify(X,e>>2,t)))return e+r;throw"Atomics.notify returned an unexpected value "+e}function Se(e){if(p)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!e)throw"Internal Error! Null pthread_ptr in cancelThread!";Me.Df[e].worker.postMessage({cmd:"cancel"})}function je(e){if(p)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!e)throw"Internal Error! Null pthread_ptr in cleanupThread!";X[e+12>>2]=0,(e=Me.Df[e])&&Me.zg(e.worker)}n.registerPthreadPtr=xe,n._emscripten_futex_wake=Ee;var $e,Me={Oh:1,mj:{Hh:0,Ih:0},Ff:[],Jf:[],kj:function(){},oi:function(){Me.wf=Hn(232);for(var e=0;58>e;++e)V[Me.wf/4+e]=0;X[Me.wf+12>>2]=Me.wf,e=Me.wf+156,X[e>>2]=e;var t=Hn(512);for(e=0;128>e;++e)V[t/4+e]=0;Atomics.store(V,Me.wf+104>>2,t),Atomics.store(V,Me.wf+40>>2,Me.wf),Atomics.store(V,Me.wf+44>>2,42),Me.Bh(),xe(Me.wf,!d,1),sr(Me.wf)},pi:function(){Me.Bh(),r(n),Me.receiveObjectTransfer=Me.Hi,Me.setThreadStatus=Me.Ki,Me.threadCancel=Me.Oi,Me.threadExit=Me.Pi},Bh:function(){Me.Uf=vr},Df:{},Cg:[],Ki:function(){},dh:function(){for(;0>2,e),Atomics.store(V,t+0>>2,1),Atomics.store(V,t+60>>2,1),Atomics.store(V,t+64>>2,0),Me.dh(),Ee(t+0,2147483647),xe(0,0,0),T=0,p&&postMessage({cmd:"exit"}))},Oi:function(){Me.dh(),Atomics.store(V,T+4>>2,-1),Atomics.store(V,T+0>>2,1),Ee(T+0,2147483647),T=D=0,xe(0,0,0),postMessage({cmd:"cancelDone"})},Ni:function(){for(var e in Me.Df){var t=Me.Df[e];t&&t.worker&&Me.zg(t.worker)}for(Me.Df={},e=0;e>2];X[e.threadInfoStruct+104>>2]=0,qn(t),qn(e.threadInfoStruct)}e.threadInfoStruct=0,e.Jg&&e.Qf&&qn(e.Qf),e.Qf=0,e.worker&&(e.worker.xf=null)}},zg:function(e){delete Me.Df[e.xf.Kh],Me.Ff.push(e),Me.Jf.splice(Me.Jf.indexOf(e),1),Me.Og(e.xf),e.xf=void 0},Hi:function(){},ui:function(t,r){t.onmessage=function(e){var n=e.data,i=n.cmd;if(t.xf&&(Me.Lg=t.xf.threadInfoStruct),n.targetThread&&n.targetThread!=(0|_e)){var o=Me.Df[n.wj];o?o.worker.postMessage(e.data,n.transferList):console.error('Internal error! Worker sent a message "'+i+'" to target pthread '+n.targetThread+", but that thread no longer exists!")}else if("processQueuedMainThreadWork"===i)cr();else if("spawnThread"===i)jn(e.data);else if("cleanupThread"===i)je(n.thread);else if("killThread"===i){if(e=n.thread,p)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!e)throw"Internal Error! Null pthread_ptr in killThread!";X[e+12>>2]=0,(e=Me.Df[e]).worker.terminate(),Me.Og(e),Me.Jf.splice(Me.Jf.indexOf(e.worker),1),e.worker.xf=void 0}else if("cancelThread"===i)Se(n.thread);else if("loaded"===i)t.loaded=!0,r&&r(t),t.ng&&(t.ng(),delete t.ng);else if("print"===i)k("Thread "+n.threadId+": "+n.text);else if("printErr"===i)A("Thread "+n.threadId+": "+n.text);else if("alert"===i)alert("Thread "+n.threadId+": "+n.text);else if("exit"===i)t.xf&&Atomics.load(V,t.xf.Kh+68>>2)&&Me.zg(t);else if("exitProcess"===i){S=!1;try{kr(n.returnCode)}catch(e){if(e instanceof br)return;throw e}}else"cancelDone"===i?Me.zg(t):"objectTransfer"!==i&&("setimmediate"===e.data.target?t.postMessage(e.data):A("worker sent an unknown command "+i));Me.Lg=void 0},t.onerror=function(e){A("pthread sent an error! "+e.filename+":"+e.lineno+": "+e.message)},h&&(t.on("message",(function(e){t.onmessage({data:e})})),t.on("error",(function(e){t.onerror(e)})),t.on("exit",(function(){}))),t.postMessage({cmd:"load",urlOrBlob:n.mainScriptUrlOrBlob||e,wasmMemory:$,wasmModule:M})},Vh:function(){var e=b("ffmpeg-core.worker.js");Me.Ff.push(new Worker(e))},ki:function(){return 0==Me.Ff.length&&(Me.Vh(),Me.ui(Me.Ff[0])),0>2]=e}function De(e,t){if(0===e)e=Date.now();else{if(1!==e&&4!==e)return Te(28),-1;e=$e()}return X[t>>2]=e/1e3|0,X[t+4>>2]=e%1e3*1e6|0,0}function Ce(e,t){if(p)return cn(1,1,e,t);ie.unshift({uh:e,Sf:t})}function Fe(e,t){return e=new Date(1e3*X[e>>2]),X[t>>2]=e.getUTCSeconds(),X[t+4>>2]=e.getUTCMinutes(),X[t+8>>2]=e.getUTCHours(),X[t+12>>2]=e.getUTCDate(),X[t+16>>2]=e.getUTCMonth(),X[t+20>>2]=e.getUTCFullYear()-1900,X[t+24>>2]=e.getUTCDay(),X[t+36>>2]=0,X[t+32>>2]=0,X[t+28>>2]=(e.getTime()-Date.UTC(e.getUTCFullYear(),0,1,0,0,0,0))/864e5|0,Fe.hh||(Fe.hh=B("GMT")),X[t+40>>2]=Fe.hh,t}function Oe(){function e(e){return(e=e.toTimeString().match(/\(([A-Za-z ]+)\)$/))?e[1]:"GMT"}if(p)return cn(2,1);if(!Oe.Xh){Oe.Xh=!0;var t=(new Date).getFullYear(),n=new Date(t,0,1),r=new Date(t,6,1);t=n.getTimezoneOffset();var i=r.getTimezoneOffset(),o=Math.max(t,i);X[rr()>>2]=60*o,X[nr()>>2]=Number(t!=i),n=e(n),r=e(r),n=B(n),r=B(r),i>2]=n,X[tr()+4>>2]=r):(X[tr()>>2]=r,X[tr()+4>>2]=n)}}function Ie(e,t){Oe(),e=new Date(1e3*X[e>>2]),X[t>>2]=e.getSeconds(),X[t+4>>2]=e.getMinutes(),X[t+8>>2]=e.getHours(),X[t+12>>2]=e.getDate(),X[t+16>>2]=e.getMonth(),X[t+20>>2]=e.getFullYear()-1900,X[t+24>>2]=e.getDay();var n=new Date(e.getFullYear(),0,1);X[t+28>>2]=(e.getTime()-n.getTime())/864e5|0,X[t+36>>2]=-60*e.getTimezoneOffset();var r=new Date(e.getFullYear(),6,1).getTimezoneOffset();return e=0|(r!=(n=n.getTimezoneOffset())&&e.getTimezoneOffset()==Math.min(n,r)),X[t+32>>2]=e,e=X[tr()+(e?4:0)>>2],X[t+40>>2]=e,t}function Pe(e,t){for(var n=0,r=e.length-1;0<=r;r--){var i=e[r];"."===i?e.splice(r,1):".."===i?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n;n--)e.unshift("..");return e}function Le(e){var t="/"===e.charAt(0),n="/"===e.substr(-1);return(e=Pe(e.split("/").filter((function(e){return!!e})),!t).join("/"))||t||(e="."),e&&n&&(e+="/"),(t?"/":"")+e}function Re(e){var t=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1);return e=t[0],t=t[1],e||t?(t&&(t=t.substr(0,t.length-1)),e+t):"."}function Ne(e){if("/"===e)return"/";var t=(e=(e=Le(e)).replace(/\/$/,"")).lastIndexOf("/");return-1===t?e:e.substr(t+1)}function Be(e,t){return Le(e+"/"+t)}function Ue(){for(var e="",t=!1,n=arguments.length-1;-1<=n&&!t;n--){if("string"!=typeof(t=0<=n?arguments[n]:Ve.cwd()))throw new TypeError("Arguments to path.resolve must be strings");if(!t)return"";e=t+"/"+e,t="/"===t.charAt(0)}return(t?"/":"")+(e=Pe(e.split("/").filter((function(e){return!!e})),!t).join("/"))||"."}function ze(e,t){function n(e){for(var t=0;tn?[]:e.slice(t,n-t+1)}e=Ue(e).substr(1),t=Ue(t).substr(1),e=n(e.split("/")),t=n(t.split("/"));for(var r=Math.min(e.length,t.length),i=r,o=0;o=t||(t=Math.max(t,n*(1048576>n?2:1.125)>>>0),0!=n&&(t=Math.max(t,256)),n=e.af,e.af=new Uint8Array(t),0t)e.af.length=t;else for(;e.af.length=e.node.ff)return 0;if(8<(e=Math.min(e.node.ff-i,r))&&o.subarray)t.set(o.subarray(i,i+e),n);else for(r=0;rt)throw new Ve.$e(28);return t},eg:function(e,t,n){Xe.rh(e.node,t+n),e.node.ff=Math.max(e.node.ff,t+n)},Vf:function(e,t,n,r,i,o){if(F(0===t),!Ve.isFile(e.node.mode))throw new Ve.$e(43);if(e=e.node.af,2&o||e.buffer!==G){for((0>>0)%Ve.Bf.length},yh:function(e){var t=Ve.Rg(e.parent.id,e.name);e.Of=Ve.Bf[t],Ve.Bf[t]=e},zh:function(e){var t=Ve.Rg(e.parent.id,e.name);if(Ve.Bf[t]===e)Ve.Bf[t]=e.Of;else for(t=Ve.Bf[t];t;){if(t.Of===e){t.Of=e.Of;break}t=t.Of}},Af:function(e,t){var n=Ve.xi(e);if(n)throw new Ve.$e(n,e);for(n=Ve.Bf[Ve.Rg(e.id,t)];n;n=n.Of){var r=n.name;if(n.parent.id===e.id&&r===t)return n}return Ve.lookup(e,t)},createNode:function(e,t,n,r){return e=new Ve.Nh(e,t,n,r),Ve.yh(e),e},Mg:function(e){Ve.zh(e)},vg:function(e){return e===e.parent},Mf:function(e){return!!e.kg},isFile:function(e){return 32768==(61440&e)},jf:function(e){return 16384==(61440&e)},Lf:function(e){return 40960==(61440&e)},gg:function(e){return 8192==(61440&e)},ri:function(e){return 24576==(61440&e)},isFIFO:function(e){return 4096==(61440&e)},isSocket:function(e){return 49152==(49152&e)},ii:{r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218},Ch:function(e){var t=Ve.ii[e];if(void 0===t)throw Error("Unknown file open mode: "+e);return t},sh:function(e){var t=["r","w","rw"][3&e];return 512&e&&(t+="w"),t},If:function(e,t){return Ve.Ah||(-1===t.indexOf("r")||292&e.mode)&&(-1===t.indexOf("w")||146&e.mode)&&(-1===t.indexOf("x")||73&e.mode)?0:2},xi:function(e){var t=Ve.If(e,"x");return t||(e.bf.lookup?0:2)},Xg:function(e,t){try{return Ve.Af(e,t),20}catch(e){}return Ve.If(e,"wx")},wg:function(e,t,n){try{var r=Ve.Af(e,t)}catch(e){return e.df}if(e=Ve.If(e,"wx"))return e;if(n){if(!Ve.jf(r.mode))return 54;if(Ve.vg(r)||Ve.Hf(r)===Ve.cwd())return 10}else if(Ve.jf(r.mode))return 31;return 0},yi:function(e,t){return e?Ve.Lf(e.mode)?32:Ve.jf(e.mode)&&("r"!==Ve.sh(t)||512&t)?31:Ve.If(e,Ve.sh(t)):44},Ph:4096,Ai:function(e,t){for(t=t||Ve.Ph,e=e||0;e<=t;e++)if(!Ve.streams[e])return e;throw new Ve.$e(33)},yf:function(e){return Ve.streams[e]},mh:function(e,t,n){Ve.Gg||(Ve.Gg=function(){},Ve.Gg.prototype={object:{get:function(){return this.node},set:function(e){this.node=e}}});var r,i=new Ve.Gg;for(r in e)i[r]=e[r];return e=i,t=Ve.Ai(t,n),e.fd=t,Ve.streams[t]=e},$h:function(e){Ve.streams[e]=null},Zh:{open:function(e){e.cf=Ve.ji(e.node.rdev).cf,e.cf.open&&e.cf.open(e)},sf:function(){throw new Ve.$e(70)}},Vg:function(e){return e>>8},nj:function(e){return 255&e},Nf:function(e,t){return e<<8|t},bh:function(e,t){Ve.oh[e]={cf:t}},ji:function(e){return Ve.oh[e]},vh:function(e){var t=[];for(e=[e];e.length;){var n=e.pop();t.push(n),e.push.apply(e,n.lg)}return t},Jh:function(e,t){function n(e){return Ve.Bg--,t(e)}function r(e){if(e){if(!r.fi)return r.fi=!0,n(e)}else++o>=i.length&&n(null)}"function"==typeof e&&(t=e,e=!1),Ve.Bg++,1t)throw new Ve.$e(28);var n;if(!(n="string"==typeof e?Ve.ef(e,{vf:!0}).node:e).bf.mf)throw new Ve.$e(63);if(Ve.jf(n.mode))throw new Ve.$e(31);if(!Ve.isFile(n.mode))throw new Ve.$e(28);if(e=Ve.If(n,"w"))throw new Ve.$e(e);n.bf.mf(n,{size:t,timestamp:Date.now()})},ej:function(e,t){if(!(e=Ve.yf(e)))throw new Ve.$e(8);if(0==(2097155&e.flags))throw new Ve.$e(28);Ve.truncate(e.node,t)},zj:function(e,t,n){(e=Ve.ef(e,{vf:!0}).node).bf.mf(e,{timestamp:Math.max(t,n)})},open:function(e,t,r,i,o){if(""===e)throw new Ve.$e(44);if(r=64&(t="string"==typeof t?Ve.Ch(t):t)?4095&(void 0===r?438:r)|32768:0,"object"==typeof e)var a=e;else{e=Le(e);try{a=Ve.ef(e,{vf:!(131072&t)}).node}catch(e){}}var f=!1;if(64&t)if(a){if(128&t)throw new Ve.$e(20)}else a=Ve.Ef(e,r,0),f=!0;if(!a)throw new Ve.$e(44);if(Ve.gg(a.mode)&&(t&=-513),65536&t&&!Ve.jf(a.mode))throw new Ve.$e(54);if(!f&&(r=Ve.yi(a,t)))throw new Ve.$e(r);512&t&&Ve.truncate(a,0),t&=-131713,(i=Ve.mh({node:a,path:Ve.Hf(a),flags:t,seekable:!0,position:0,cf:a.cf,Vi:[],error:!1},i,o)).cf.open&&i.cf.open(i),!n.logReadFiles||1&t||(Ve.Zg||(Ve.Zg={}),e in Ve.Zg||(Ve.Zg[e]=1,A("FS.trackingDelegate error on read file: "+e)));try{Ve.lf.onOpenFile&&(o=0,1!=(2097155&t)&&(o|=Ve.Lh.Fh.Qh),0!=(2097155&t)&&(o|=Ve.Lh.Fh.Rh),Ve.lf.onOpenFile(e,o))}catch(t){A("FS.trackingDelegate['onOpenFile']('"+e+"', flags) threw an exception: "+t.message)}return i},close:function(e){if(Ve.hg(e))throw new Ve.$e(8);e.Kf&&(e.Kf=null);try{e.cf.close&&e.cf.close(e)}catch(e){throw e}finally{Ve.$h(e.fd)}e.fd=null},hg:function(e){return null===e.fd},sf:function(e,t,n){if(Ve.hg(e))throw new Ve.$e(8);if(!e.seekable||!e.cf.sf)throw new Ve.$e(70);if(0!=n&&1!=n&&2!=n)throw new Ve.$e(28);return e.position=e.cf.sf(e,t,n),e.Vi=[],e.position},read:function(e,t,n,r,i){if(0>r||0>i)throw new Ve.$e(28);if(Ve.hg(e))throw new Ve.$e(8);if(1==(2097155&e.flags))throw new Ve.$e(8);if(Ve.jf(e.node.mode))throw new Ve.$e(31);if(!e.cf.read)throw new Ve.$e(28);var o=void 0!==i;if(o){if(!e.seekable)throw new Ve.$e(70)}else i=e.position;return t=e.cf.read(e,t,n,r,i),o||(e.position+=t),t},write:function(e,t,n,r,i,o){if(0>r||0>i)throw new Ve.$e(28);if(Ve.hg(e))throw new Ve.$e(8);if(0==(2097155&e.flags))throw new Ve.$e(8);if(Ve.jf(e.node.mode))throw new Ve.$e(31);if(!e.cf.write)throw new Ve.$e(28);e.seekable&&1024&e.flags&&Ve.sf(e,0,2);var a=void 0!==i;if(a){if(!e.seekable)throw new Ve.$e(70)}else i=e.position;t=e.cf.write(e,t,n,r,i,o),a||(e.position+=t);try{e.path&&Ve.lf.onWriteToFile&&Ve.lf.onWriteToFile(e.path)}catch(t){A("FS.trackingDelegate['onWriteToFile']('"+e.path+"') threw an exception: "+t.message)}return t},eg:function(e,t,n){if(Ve.hg(e))throw new Ve.$e(8);if(0>t||0>=n)throw new Ve.$e(28);if(0==(2097155&e.flags))throw new Ve.$e(8);if(!Ve.isFile(e.node.mode)&&!Ve.jf(e.node.mode))throw new Ve.$e(43);if(!e.cf.eg)throw new Ve.$e(138);e.cf.eg(e,t,n)},Vf:function(e,t,n,r,i,o){if(0!=(2&i)&&0==(2&o)&&2!=(2097155&e.flags))throw new Ve.$e(2);if(1==(2097155&e.flags))throw new Ve.$e(2);if(!e.cf.Vf)throw new Ve.$e(43);return e.cf.Vf(e,t,n,r,i,o)},Wf:function(e,t,n,r,i){return e&&e.cf.Wf?e.cf.Wf(e,t,n,r,i):0},rj:function(){return 0},Tf:function(e,t,n){if(!e.cf.Tf)throw new Ve.$e(59);return e.cf.Tf(e,t,n)},readFile:function(e,t){if((t=t||{}).flags=t.flags||"r",t.encoding=t.encoding||"binary","utf8"!==t.encoding&&"binary"!==t.encoding)throw Error('Invalid encoding type "'+t.encoding+'"');var n,r=Ve.open(e,t.flags);e=Ve.stat(e).size;var i=new Uint8Array(e);return Ve.read(r,i,0,e,0),"utf8"===t.encoding?n=P(i,0):"binary"===t.encoding&&(n=i),Ve.close(r),n},writeFile:function(e,t,n){if((n=n||{}).flags=n.flags||"w",e=Ve.open(e,n.flags,n.mode),"string"==typeof t){var r=new Uint8Array(N(t)+1);t=R(t,r,0,r.length),Ve.write(e,r,0,t,void 0,n.Yh)}else{if(!ArrayBuffer.isView(t))throw Error("Unsupported data type");Ve.write(e,t,0,t.byteLength,void 0,n.Yh)}Ve.close(e)},cwd:function(){return Ve.nh},chdir:function(e){if(null===(e=Ve.ef(e,{vf:!0})).node)throw new Ve.$e(44);if(!Ve.jf(e.node.mode))throw new Ve.$e(54);var t=Ve.If(e.node,"x");if(t)throw new Ve.$e(t);Ve.nh=e.path},bi:function(){Ve.mkdir("/tmp"),Ve.mkdir("/home"),Ve.mkdir("/home/web_user")},ai:function(){Ve.mkdir("/dev"),Ve.bh(Ve.Nf(1,3),{read:function(){return 0},write:function(e,t,n,r){return r}}),Ve.xg("/dev/null",Ve.Nf(1,3)),We(Ve.Nf(5,0),He),We(Ve.Nf(6,0),Ye),Ve.xg("/dev/tty",Ve.Nf(5,0)),Ve.xg("/dev/tty1",Ve.Nf(6,0));var e=function(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var e=new Uint8Array(1);return function(){return crypto.getRandomValues(e),e[0]}}if(h)try{var t=require("crypto");return function(){return t.randomBytes(1)[0]}}catch(e){}return function(){de("randomDevice")}}();Ve.Gf("/dev","random",e),Ve.Gf("/dev","urandom",e),Ve.mkdir("/dev/shm"),Ve.mkdir("/dev/shm/tmp")},di:function(){Ve.mkdir("/proc"),Ve.mkdir("/proc/self"),Ve.mkdir("/proc/self/fd"),Ve.hf({hf:function(){var e=Ve.createNode("/proc/self","fd",16895,73);return e.bf={lookup:function(e,t){var n=Ve.yf(+t);if(!n)throw new Ve.$e(8);return(e={parent:null,hf:{Dh:"fake"},bf:{readlink:function(){return n.path}}}).parent=e}},e}},{},"/proc/self/fd")},ei:function(){n.stdin?Ve.Gf("/dev","stdin",n.stdin):Ve.symlink("/dev/tty","/dev/stdin"),n.stdout?Ve.Gf("/dev","stdout",null,n.stdout):Ve.symlink("/dev/tty","/dev/stdout"),n.stderr?Ve.Gf("/dev","stderr",null,n.stderr):Ve.symlink("/dev/tty1","/dev/stderr"),Ve.open("/dev/stdin","r"),Ve.open("/dev/stdout","w"),Ve.open("/dev/stderr","w")},qh:function(){Ve.$e||(Ve.$e=function(e,t){this.node=t,this.Ji=function(e){this.df=e},this.Ji(e),this.message="FS error"},Ve.$e.prototype=Error(),Ve.$e.prototype.constructor=Ve.$e,[44].forEach((function(e){Ve.Pg[e]=new Ve.$e(e),Ve.Pg[e].stack=""})))},Mi:function(){Ve.qh(),Ve.Bf=Array(4096),Ve.hf(Xe,{},"/"),Ve.bi(),Ve.ai(),Ve.di(),Ve.hi={MEMFS:Xe}},fg:function(e,t,r){Ve.fg.Sg=!0,Ve.qh(),n.stdin=e||n.stdin,n.stdout=t||n.stdout,n.stderr=r||n.stderr,Ve.ei()},quit:function(){Ve.fg.Sg=!1;var e=n._fflush;for(e&&e(0),e=0;ethis.length-1||0>e)){var t=e%this.chunkSize;return this.xh(e/this.chunkSize|0)[t]}},o.prototype.Uh=function(e){this.xh=e},o.prototype.jh=function(){var e=new XMLHttpRequest;if(e.open("HEAD",n,!1),e.send(null),!(200<=e.status&&300>e.status||304===e.status))throw Error("Couldn't load "+n+". Status: "+e.status);var t,r=Number(e.getResponseHeader("Content-length")),i=(t=e.getResponseHeader("Accept-Ranges"))&&"bytes"===t;e=(t=e.getResponseHeader("Content-Encoding"))&&"gzip"===t;var o=1048576;i||(o=r);var a=this;a.Uh((function(e){var t=e*o,i=(e+1)*o-1;if(i=Math.min(i,r-1),void 0===a.Rf[e]){var f=a.Rf;if(t>i)throw Error("invalid range ("+t+", "+i+") or no bytes requested!");if(i>r-1)throw Error("only "+r+" bytes available! programmer error!");var u=new XMLHttpRequest;if(u.open("GET",n,!1),r!==o&&u.setRequestHeader("Range","bytes="+t+"-"+i),"undefined"!=typeof Uint8Array&&(u.responseType="arraybuffer"),u.overrideMimeType&&u.overrideMimeType("text/plain; charset=x-user-defined"),u.send(null),!(200<=u.status&&300>u.status||304===u.status))throw Error("Couldn't load "+n+". Status: "+u.status);t=void 0!==u.response?new Uint8Array(u.response||[]):zn(u.responseText||"",!0),f[e]=t}if(void 0===a.Rf[e])throw Error("doXHR failed!");return a.Rf[e]})),!e&&r||(o=r=1,o=r=this.xh(0).length,k("LazyFiles on gzip forces download of the whole file when length is accessed")),this.Th=r,this.Sh=o,this.Ug=!0},"undefined"!=typeof XMLHttpRequest){if(!d)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var a=new o;Object.defineProperties(a,{length:{get:function(){return this.Ug||this.jh(),this.Th}},chunkSize:{get:function(){return this.Ug||this.jh(),this.Sh}}}),a={Tg:!1,af:a}}else a={Tg:!1,url:n};var f=Ve.ci(e,t,a,r,i);a.af?f.af=a.af:a.url&&(f.af=null,f.url=a.url),Object.defineProperties(f,{ff:{get:function(){return this.af.length}}});var u={};return Object.keys(f.cf).forEach((function(e){var t=f.cf[e];u[e]=function(){if(!Ve.th(f))throw new Ve.$e(29);return t.apply(null,arguments)}})),u.read=function(e,t,n,r,i){if(!Ve.th(f))throw new Ve.$e(29);if(i>=(e=e.node.af).length)return 0;if(r=Math.min(e.length-i,r),e.slice)for(var o=0;o>2]=r.dev,X[n+4>>2]=0,X[n+8>>2]=r.ino,X[n+12>>2]=r.mode,X[n+16>>2]=r.nlink,X[n+20>>2]=r.uid,X[n+24>>2]=r.gid,X[n+28>>2]=r.rdev,X[n+32>>2]=0,ye=[r.size>>>0,(we=r.size,1<=+Math.abs(we)?0>>0:~~+Math.ceil((we-+(~~we>>>0))/4294967296)>>>0:0)],X[n+40>>2]=ye[0],X[n+44>>2]=ye[1],X[n+48>>2]=4096,X[n+52>>2]=r.blocks,X[n+56>>2]=r.atime.getTime()/1e3|0,X[n+60>>2]=0,X[n+64>>2]=r.mtime.getTime()/1e3|0,X[n+68>>2]=0,X[n+72>>2]=r.ctime.getTime()/1e3|0,X[n+76>>2]=0,ye=[r.ino>>>0,(we=r.ino,1<=+Math.abs(we)?0>>0:~~+Math.ceil((we-+(~~we>>>0))/4294967296)>>>0:0)],X[n+80>>2]=ye[0],X[n+84>>2]=ye[1],0}var Ze=void 0;function Ke(){return X[(Ze+=4)-4>>2]}function et(e){if(!(e=Ve.yf(e)))throw new Ve.$e(8);return e}function tt(e,t,n,r,i){if(p)return cn(3,1,e,t,n,r,i);try{i=0;for(var o=t?X[t>>2]:0,a=t?X[t+4>>2]:0,f=n?X[n>>2]:0,u=n?X[n+4>>2]:0,c=r?X[r>>2]:0,s=r?X[r+4>>2]:0,l=0,d=0,h=0,m=0,g=0,w=0,y=(t?X[t>>2]:0)|(n?X[n>>2]:0)|(r?X[r>>2]:0),v=(t?X[t+4>>2]:0)|(n?X[n+4>>2]:0)|(r?X[r+4>>2]:0),b=0;bb?y&_:v&_){var k=Ve.yf(b);if(!k)throw new Ve.$e(8);var A=5;k.cf.Yf&&(A=k.cf.Yf(k)),1&A&&(32>b?o&_:a&_)&&(32>b?l|=_:d|=_,i++),4&A&&(32>b?f&_:u&_)&&(32>b?h|=_:m|=_,i++),2&A&&(32>b?c&_:s&_)&&(32>b?g|=_:w|=_,i++)}}return t&&(X[t>>2]=l,X[t+4>>2]=d),n&&(X[n>>2]=h,X[n+4>>2]=m),r&&(X[r>>2]=g,X[r+4>>2]=w),i}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function nt(e,t){if(p)return cn(4,1,e,t);try{var n;if(e=L(e),-8&t)var r=-28;else(n=Ve.ef(e,{vf:!0}).node)?(e="",4&t&&(e+="r"),2&t&&(e+="w"),1&t&&(e+="x"),r=e&&Ve.If(n,e)?-2:0):r=-44;return r}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function rt(e,t,n){if(p)return cn(5,1,e,t,n);Ze=n;try{var r=et(e);switch(t){case 0:var i=Ke();return 0>i?-28:Ve.open(r.path,r.flags,0,i).fd;case 1:case 2:case 13:case 14:return 0;case 3:return r.flags;case 4:return i=Ke(),r.flags|=i,0;case 12:return i=Ke(),H[i+0>>1]=2,0;case 16:case 8:default:return-28;case 9:return Te(28),-1}}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function it(e,t){if(p)return cn(6,1,e,t);try{var n=et(e);return Je(Ve.stat,n.path,t)}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function ot(e,t,n){if(p)return cn(7,1,e,t,n);try{var r=et(e);r.Kf||(r.Kf=Ve.readdir(r.path)),e=0;for(var i=Ve.sf(r,0,1),o=Math.floor(i/280);o>>0,(we=f,1<=+Math.abs(we)?0>>0:~~+Math.ceil((we-+(~~we>>>0))/4294967296)>>>0:0)],X[t+e>>2]=ye[0],X[t+e+4>>2]=ye[1],ye=[280*(o+1)>>>0,(we=280*(o+1),1<=+Math.abs(we)?0>>0:~~+Math.ceil((we-+(~~we>>>0))/4294967296)>>>0:0)],X[t+e+8>>2]=ye[0],X[t+e+12>>2]=ye[1],H[t+e+16>>1]=280,W[t+e+18>>0]=u,R(a,q,t+e+19,256),e+=280,o+=1}return Ve.sf(r,280*o,0),e}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function at(e,t){if(p)return cn(8,1,e,t);try{return Xn(t,0,136),X[t>>2]=1,X[t+4>>2]=2,X[t+8>>2]=3,X[t+12>>2]=4,0}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function ft(e,t,n){if(p)return cn(9,1,e,t,n);Ze=n;try{var r=et(e);switch(t){case 21509:case 21505:case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:case 21523:case 21524:return r.tty?0:-59;case 21519:if(!r.tty)return-59;var i=Ke();return X[i>>2]=0;case 21520:return r.tty?-28:-59;case 21531:return i=Ke(),Ve.Tf(r,t,i);default:de("bad ioctl syscall "+t)}}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function ut(e,t){if(p)return cn(10,1,e,t);try{return e=L(e),Je(Ve.lstat,e,t)}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function ct(e,t){if(p)return cn(11,1,e,t);try{return"/"===(e=Le(e=L(e)))[e.length-1]&&(e=e.substr(0,e.length-1)),Ve.mkdir(e,t,0),0}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function st(e,t,n,r,i,o){if(p)return cn(12,1,e,t,n,r,i,o);try{e:{o<<=12;var a=!1;if(0!=(16&r)&&0!=e%16384)var f=-28;else{if(0!=(32&r)){var u=Vn(16384,t);if(!u){f=-48;break e}Xn(u,0,t),a=!0}else{var c=Ve.yf(i);if(!c){f=-8;break e}var s=Ve.Vf(c,e,t,o,n,r);u=s.Gi,a=s.Ig}Qe[u]={wi:u,ti:t,Ig:a,fd:i,Fi:n,flags:r,offset:o},f=u}}return f}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function lt(e,t){if(p)return cn(13,1,e,t);try{if(-1==(0|e)||0===t)var n=-28;else{var r=Qe[e];if(r&&t===r.ti){var i=Ve.yf(r.fd);if(2&r.Fi){var o=r.flags,a=r.offset,f=q.slice(e,e+t);Ve.Wf(i,f,a,t,o)}Qe[e]=null,r.Ig&&qn(r.wi)}n=0}return n}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function dt(e,t,n){if(p)return cn(14,1,e,t,n);Ze=n;try{var r=L(e),i=Ke();return Ve.open(r,t,i).fd}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function ht(e,t,n){if(p)return cn(15,1,e,t,n);try{for(var r=n=0;r>1],a=32,f=Ve.yf(X[i>>2]);f&&(a=5,f.cf.Yf&&(a=f.cf.Yf(f))),(a&=24|o)&&n++,H[i+6>>1]=a}return n}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function pt(e,t,n,r){if(p)return cn(16,1,e,t,n,r);try{return r&&(X[r>>2]=-1,X[r+4>>2]=-1,X[r+8>>2]=-1,X[r+12>>2]=-1),0}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function mt(e,t,n){if(p)return cn(17,1,e,t,n);try{var r=et(e);return Ve.read(r,W,t,n)}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function gt(e,t){if(p)return cn(18,1,e,t);try{return e=L(e),t=L(t),Ve.rename(e,t),0}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function wt(e){if(p)return cn(19,1,e);try{return e=L(e),Ve.rmdir(e),0}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}var yt={hf:function(){return n.websocket=n.websocket&&"object"==typeof n.websocket?n.websocket:{},n.websocket.Hg={},n.websocket.on=function(e,t){return"function"==typeof t&&(this.Hg[e]=t),this},n.websocket.emit=function(e,t){"function"==typeof this.Hg[e]&&this.Hg[e].call(this,t)},Ve.createNode(null,"/",16895,0)},createSocket:function(e,t,n){return t&=-526337,n&&F(1==t==(6==n)),e={family:e,type:t,protocol:n,kf:null,error:null,mg:{},pending:[],$f:[],nf:yt.pf},t=yt.yg(),(n=Ve.createNode(yt.root,t,49152,0)).ag=e,t=Ve.mh({path:t,node:n,flags:Ve.Ch("r+"),seekable:!1,cf:yt.cf}),e.stream=t,e},li:function(e){return(e=Ve.yf(e))&&Ve.isSocket(e.node.mode)?e.node.ag:null},cf:{Yf:function(e){return(e=e.node.ag).nf.Yf(e)},Tf:function(e,t,n){return(e=e.node.ag).nf.Tf(e,t,n)},read:function(e,t,n,r){return(r=(e=e.node.ag).nf.ah(e,r))?(t.set(r.buffer,n),r.buffer.length):0},write:function(e,t,n,r){return(e=e.node.ag).nf.eh(e,t,n,r)},close:function(e){(e=e.node.ag).nf.close(e)}},yg:function(){return yt.yg.current||(yt.yg.current=0),"socket["+yt.yg.current+++"]"},pf:{sg:function(e,t,r){if("object"==typeof t){var i=t;r=t=null}if(i)if(i._socket)t=i._socket.remoteAddress,r=i._socket.remotePort;else{if(!(r=/ws[s]?:\/\/([^:]+):(\d+)/.exec(i.url)))throw Error("WebSocket URL must be in the format ws(s)://address:port");t=r[1],r=parseInt(r[2],10)}else try{var o=n.websocket&&"object"==typeof n.websocket,a="ws:#".replace("#","//");if(o&&"string"==typeof n.websocket.url&&(a=n.websocket.url),"ws://"===a||"wss://"===a){var f=t.split("/");a=a+f[0]+":"+r+"/"+f.slice(1).join("/")}f="binary",o&&"string"==typeof n.websocket.subprotocol&&(f=n.websocket.subprotocol);var u=void 0;"null"!==f&&(f=f.replace(/^ +| +$/g,"").split(/ *, */),u=h?{protocol:f.toString()}:f),o&&null===n.websocket.subprotocol&&(u=void 0),(i=new(h?require("ws"):WebSocket)(a,u)).binaryType="arraybuffer"}catch(e){throw new Ve.$e(23)}return t={gf:t,port:r,socket:i,tg:[]},yt.pf.ih(e,t),yt.pf.mi(e,t),2===e.type&&void 0!==e.Pf&&t.tg.push(new Uint8Array([255,255,255,255,112,111,114,116,(65280&e.Pf)>>8,255&e.Pf])),t},ug:function(e,t,n){return e.mg[t+":"+n]},ih:function(e,t){e.mg[t.gf+":"+t.port]=t},Gh:function(e,t){delete e.mg[t.gf+":"+t.port]},mi:function(e,t){function r(){n.websocket.emit("open",e.stream.fd);try{for(var r=t.tg.shift();r;)t.socket.send(r),r=t.tg.shift()}catch(e){t.socket.close()}}function i(r){if("string"==typeof r)r=(new TextEncoder).encode(r);else{if(F(void 0!==r.byteLength),0==r.byteLength)return;r=new Uint8Array(r)}var i=o;o=!1,i&&10===r.length&&255===r[0]&&255===r[1]&&255===r[2]&&255===r[3]&&112===r[4]&&111===r[5]&&114===r[6]&&116===r[7]?(r=r[8]<<8|r[9],yt.pf.Gh(e,t),t.port=r,yt.pf.ih(e,t)):(e.$f.push({gf:t.gf,port:t.port,data:r}),n.websocket.emit("message",e.stream.fd))}var o=!0;h?(t.socket.on("open",r),t.socket.on("message",(function(e,t){t.Xi&&i(new Uint8Array(e).buffer)})),t.socket.on("close",(function(){n.websocket.emit("close",e.stream.fd)})),t.socket.on("error",(function(){e.error=14,n.websocket.emit("error",[e.stream.fd,e.error,"ECONNREFUSED: Connection refused"])}))):(t.socket.onopen=r,t.socket.onclose=function(){n.websocket.emit("close",e.stream.fd)},t.socket.onmessage=function(e){i(e.data)},t.socket.onerror=function(){e.error=14,n.websocket.emit("error",[e.stream.fd,e.error,"ECONNREFUSED: Connection refused"])})},Yf:function(e){if(1===e.type&&e.kf)return e.pending.length?65:0;var t=0,n=1===e.type?yt.pf.ug(e,e.rf,e.uf):null;return(e.$f.length||!n||n&&n.socket.readyState===n.socket.CLOSING||n&&n.socket.readyState===n.socket.CLOSED)&&(t|=65),(!n||n&&n.socket.readyState===n.socket.OPEN)&&(t|=4),(n&&n.socket.readyState===n.socket.CLOSING||n&&n.socket.readyState===n.socket.CLOSED)&&(t|=16),t},Tf:function(e,t,n){return 21531===t?(t=0,e.$f.length&&(t=e.$f[0].data.length),X[n>>2]=t,0):28},close:function(e){if(e.kf){try{e.kf.close()}catch(e){}e.kf=null}for(var t=Object.keys(e.mg),n=0;nt;t++){var n=Number(e[t]);if(isNaN(n))return null;e[t]=n}return(e[0]|e[1]<<8|e[2]<<16|e[3]<<24)>>>0}function bt(e){var t,n,r=[];if(!/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i.test(e))return null;if("::"===e)return[0,0,0,0,0,0,0,0];for(0<(e=0===e.indexOf("::")?e.replace("::","Z:"):e.replace("::",":Z:")).indexOf(".")?((e=(e=e.replace(/[.]/g,":")).split(":"))[e.length-4]=parseInt(e[e.length-4])+256*parseInt(e[e.length-3]),e[e.length-3]=parseInt(e[e.length-2])+256*parseInt(e[e.length-1]),e=e.slice(0,e.length-2)):e=e.split(":"),t=n=0;t(t=_t++),"exceeded max address mappings of 65535"),At[t="172.29."+(255&t)+"."+(65280&t)]=e,kt[e]=t),t)}function Et(e){return At[e]?At[e]:null}function St(e){return(255&e)+"."+(e>>8&255)+"."+(e>>16&255)+"."+(e>>24&255)}function jt(e){var t,n="",r=0,i=0,o=0,a=0;e=[65535&e[0],e[0]>>16,65535&e[1],e[1]>>16,65535&e[2],e[2]>>16,65535&e[3],e[3]>>16];var f=!0;for(t=0;5>t;t++)if(0!==e[t]){f=!1;break}if(f){if(t=St(e[6]|e[7]<<16),-1===e[5])return"::ffff:"+t;if(0===e[5])return"0.0.0.0"===t&&(t=""),"0.0.0.1"===t&&(t="1"),"::"+t}for(t=0;8>t;t++)0===e[t]&&(1r&&(o=t-(r=a)+1);for(t=0;8>t;t++)1=o&&tt?":":"");return n}function $t(e,t){var n=H[e>>1],r=Qn(Y[e+2>>1]);switch(n){case 2:if(16!==t)return{df:28};e=St(e=X[e+4>>2]);break;case 10:if(28!==t)return{df:28};e=jt(e=[X[e+8>>2],X[e+12>>2],X[e+16>>2],X[e+20>>2]]);break;default:return{df:5}}return{family:n,gf:e,port:r}}function Mt(e,t,n,r){switch(t){case 2:n=vt(n),H[e>>1]=t,X[e+4>>2]=n,H[e+2>>1]=Jn(r);break;case 10:n=bt(n),X[e>>2]=t,X[e+8>>2]=n[0],X[e+12>>2]=n[1],X[e+16>>2]=n[2],X[e+20>>2]=n[3],H[e+2>>1]=Jn(r),X[e+4>>2]=0,X[e+24>>2]=0;break;default:return{df:5}}return{}}function Tt(e,t){if(p)return cn(20,1,e,t);try{Ze=t,t=function(){var e=yt.li(Ke());if(!e)throw new Ve.$e(8);return e};var n=function(e){var t=Ke(),n=Ke();if(e&&0===t)return null;if((e=$t(t,n)).df)throw new Ve.$e(e.df);return e.gf=Et(e.gf)||e.gf,e};switch(e){case 1:var r=Ke(),i=Ke(),o=Ke(),a=yt.createSocket(r,i,o);return a.stream.fd;case 2:a=t();var f=n();return a.nf.bind(a,f.gf,f.port),0;case 3:return a=t(),f=n(),a.nf.connect(a,f.gf,f.port),0;case 4:a=t();var u=Ke();return a.nf.listen(a,u),0;case 5:a=t();var c=Ke();Ke();var s=a.nf.accept(a);return c&&Mt(c,s.family,xt(s.rf),s.uf),s.stream.fd;case 6:return a=t(),c=Ke(),Ke(),Mt(c,a.family,xt(a.Ag||"0.0.0.0"),a.Pf),0;case 7:return a=t(),c=Ke(),Ke(),a.rf?(Mt(c,a.family,xt(a.rf),a.uf),0):-53;case 11:a=t();var l=Ke(),d=Ke();Ke();var h=n(!0);return h?a.nf.eh(a,W,l,d,h.gf,h.port):Ve.write(a.stream,W,l,d);case 12:a=t();var m=Ke(),g=Ke();Ke(),c=Ke(),Ke();var w=a.nf.ah(a,g);return w?(c&&Mt(c,a.family,xt(w.gf),w.port),q.set(w.buffer,m),w.buffer.byteLength):0;case 14:return-50;case 15:a=t();var y=Ke(),v=Ke(),b=Ke(),_=Ke();return 1===y&&4===v?(X[b>>2]=a.error,X[_>>2]=4,a.error=null,0):-50;case 16:a=t(),l=Ke(),Ke();var k=X[l+8>>2],A=X[l+12>>2],x=X[l>>2],E=X[l+4>>2];if(x){if((f=$t(x,E)).df)return-f.df;var S=f.port;c=Et(f.gf)||f.gf}for(var j=0,$=0;$>2];var M=new Uint8Array(j);for($=d=0;$>2],D=X[k+(8*$+4)>>2];for(m=0;m>0]}return a.nf.eh(a,M,0,j,c,S);case 17:for(a=t(),l=Ke(),Ke(),k=X[l+8>>2],A=X[l+12>>2],$=j=0;$>2];if(!(w=a.nf.ah(a,j)))return 0;(x=X[l>>2])&&Mt(x,a.family,xt(w.gf),w.port),a=0;var C=w.buffer.byteLength;for($=0;0>2],(D=X[k+(8*$+4)>>2])&&(d=Math.min(D,C),m=w.buffer.subarray(a,a+d),q.set(m,T+a),a+=d,C-=d);return a;default:return-52}}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function Dt(e,t){if(p)return cn(21,1,e,t);try{return e=L(e),Je(Ve.stat,e,t)}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function Ct(e){if(p)return cn(22,1,e);try{return e=L(e),Ve.unlink(e),0}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}}function Ft(){h||d||(x||(x={}),x["Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread"]||(x["Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread"]=1,A("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")))}function Ot(e,t,n){if(0>=e||e>W.length||1&e)return-28;if(l){if(Atomics.load(X,e>>2)!=t)return-6;var r=performance.now();for(n=r+n,Atomics.exchange(X,Me.Uf>>2,e);;){if((r=performance.now())>n)return Atomics.exchange(X,Me.Uf>>2,0),-73;if(0==(r=Atomics.exchange(X,Me.Uf>>2,0)))break;if(cr(),Atomics.load(X,e>>2)!=t)return-6;Atomics.exchange(X,Me.Uf>>2,e)}return 0}if("timed-out"===(e=Atomics.wait(X,e>>2,t,n)))return-73;if("not-equal"===e)return-6;if("ok"===e)return 0;throw"Atomics.wait returned an unexpected value "+e}var It=1,Pt=[],Lt=[],Rt=[],Nt=[],Bt=[],Ut=[],zt=[],Gt=[],Wt=[],qt={},Ht={},Yt=4;function Xt(e){Qt||(Qt=e)}function Vt(e){for(var t=It++,n=e.length;n>2]=a}}function Kt(e,t,n,r,i,o,a,f){t=Lt[t],(e=Ln[e](t,n))&&(r=f&&R(e.name,q,f,r),i&&(X[i>>2]=r),o&&(X[o>>2]=e.size),a&&(X[a>>2]=e.type))}function en(e,t){V[e>>2]=t,V[e+4>>2]=(t-V[e>>2])/4294967296}function tn(e,t,n){if(t){var r=void 0;switch(e){case 36346:r=1;break;case 36344:return void(0!=n&&1!=n&&Xt(1280));case 36345:r=0;break;case 34466:var i=Ln.getParameter(34467);r=i?i.length:0}if(void 0===r)switch(i=Ln.getParameter(e),typeof i){case"number":r=i;break;case"boolean":r=i?1:0;break;case"string":return void Xt(1280);case"object":if(null===i)switch(e){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:r=0;break;default:return void Xt(1280)}else{if(i instanceof Float32Array||i instanceof Uint32Array||i instanceof Int32Array||i instanceof Array){for(e=0;e>2]=i[e];break;case 2:Q[t+4*e>>2]=i[e];break;case 4:W[t+e>>0]=i[e]?1:0}return}try{r=0|i.name}catch(t){return Xt(1280),void A("GL_INVALID_ENUM in glGet"+n+"v: Unknown object returned from WebGL getParameter("+e+")! (error: "+t+")")}}break;default:return Xt(1280),void A("GL_INVALID_ENUM in glGet"+n+"v: Native code calling glGet"+n+"v("+e+") and it returns "+i+" of type "+typeof i+"!")}switch(n){case 1:en(t,r);break;case 0:X[t>>2]=r;break;case 2:Q[t>>2]=r;break;case 4:W[t>>0]=r?1:0}}else Xt(1281)}function nn(e){var t=N(e)+1,n=Hn(t);return R(e,q,n,t),n}function rn(e,t,n,r){if(n)if("number"==typeof(e=Ln.getUniform(Lt[e],Ut[t]))||"boolean"==typeof e)switch(r){case 0:X[n>>2]=e;break;case 2:Q[n>>2]=e}else for(t=0;t>2]=e[t];break;case 2:Q[n+4*t>>2]=e[t]}else Xt(1281)}function on(e,t,n,r){if(n)if(e=Ln.getVertexAttrib(e,t),34975==t)X[n>>2]=e&&e.name;else if("number"==typeof e||"boolean"==typeof e)switch(r){case 0:X[n>>2]=e;break;case 2:Q[n>>2]=e;break;case 5:X[n>>2]=Math.fround(e)}else for(t=0;t>2]=e[t];break;case 2:Q[n+4*t>>2]=e[t];break;case 5:X[n+4*t>>2]=Math.fround(e[t])}else Xt(1281)}function an(e,t,n,r,i){e=1==(e-=5120)?q:4==e?X:6==e?Q:5==e||28922==e?V:Y;var o=31-Math.clz32(e.BYTES_PER_ELEMENT),a=Yt;return e.subarray(i>>o,i+r*(n*({5:3,6:4,8:2,29502:3,29504:4}[t-6402]||1)*(1<>o)}var fn=[],un=[];function cn(e,t){for(var n=arguments.length-2,r=ir(),i=ar(8*n),o=i>>3,a=0;a>2]=t,X[r.rg+4>>2]=n),!r.Eh&&r.$i){if(r.rg){e=e?L(e):"",r=X[r.rg+8>>2];var i=ir(),o=ar(12),a=0;return e&&(a=nn(e)),X[o>>2]=a,X[o+4>>2]=t,X[o+8>>2]=n,pr(0,r,657457152,0,a,o),or(i),1}return-4}return r.Eh&&(r=r.Eh),e=!1,r.qg&&r.qg.pg&&(e=0===(e=r.qg.pg.getParameter(2978))[0]&&0===e[1]&&e[2]===r.width&&e[3]===r.height),r.width=t,r.height=n,e&&r.qg.pg.viewport(0,0,t,n),0}function mn(e,t,n){return p?cn(23,1,e,t,n):pn(e,t,n)}var gn,wn=["default","low-power","high-performance"],yn={};function vn(){if(!gn){var e,t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:u||"./this.program"};for(e in yn)t[e]=yn[e];var n=[];for(e in t)n.push(e+"="+t[e]);gn=n}return gn}function bn(e){if(p)return cn(24,1,e);try{var t=et(e);return Ve.close(t),0}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),e.df}}function _n(e,t){if(p)return cn(25,1,e,t);try{var n=et(e);return W[t>>0]=n.tty?2:Ve.jf(n.mode)?3:Ve.Lf(n.mode)?7:4,0}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),e.df}}function kn(e,t,n,r){if(p)return cn(26,1,e,t,n,r);try{e:{for(var i=et(e),o=e=0;o>2],f=Ve.read(i,W,X[t+8*o>>2],a,void 0);if(0>f){var u=-1;break e}if(e+=f,f>2]=u,0}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),e.df}}function An(e,t,n,r,i){if(p)return cn(27,1,e,t,n,r,i);try{var o=et(e);return-9007199254740992>=(e=4294967296*n+(t>>>0))||9007199254740992<=e?-61:(Ve.sf(o,e,r),ye=[o.position>>>0,(we=o.position,1<=+Math.abs(we)?0>>0:~~+Math.ceil((we-+(~~we>>>0))/4294967296)>>>0:0)],X[i>>2]=ye[0],X[i+4>>2]=ye[1],o.Kf&&0===e&&0===r&&(o.Kf=null),0)}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),e.df}}function xn(e,t,n,r){if(p)return cn(28,1,e,t,n,r);try{e:{for(var i=et(e),o=e=0;o>2],X[t+(8*o+4)>>2],void 0);if(0>a){var f=-1;break e}e+=a}f=e}return X[r>>2]=f,0}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),e.df}}var En={};function Sn(e,t,n,r){function i(e,t,n,r,i,o){var a=10===e?28:16;return i=10===e?jt(i):St(i),F(!(i=Mt(a=Hn(a),e,i,o)).df),i=Hn(32),X[i+4>>2]=e,X[i+8>>2]=t,X[i+12>>2]=n,X[i+24>>2]=r,X[i+20>>2]=a,X[i+16>>2]=10===e?28:16,X[i+28>>2]=0,i}if(p)return cn(29,1,e,t,n,r);var o=0,a=0,f=0,u=0,c=0,s=0;if(n&&(f=X[n>>2],u=X[n+4>>2],c=X[n+8>>2],s=X[n+12>>2]),c&&!s&&(s=2===c?17:6),!c&&s&&(c=17===s?2:1),0===s&&(s=6),0===c&&(c=1),!e&&!t)return-2;if(-1088&f||0!==n&&2&X[n>>2]&&!e)return-1;if(32&f)return-2;if(0!==c&&1!==c&&2!==c)return-7;if(0!==u&&2!==u&&10!==u)return-6;if(t&&(t=L(t),a=parseInt(t,10),isNaN(a)))return 1024&f?-2:-8;if(!e)return 0===u&&(u=2),0==(1&f)&&(o=2===u?er(2130706433):[0,0,0,1]),e=i(u,c,s,null,o,a),X[r>>2]=e,0;if(null!==(o=vt(e=L(e))))if(0===u||2===u)u=2;else{if(!(10===u&&8&f))return-2;o=[0,0,er(65535),o],u=10}else if(null!==(o=bt(e))){if(0!==u&&10!==u)return-2;u=10}return null!=o?(e=i(u,c,s,e,o,a),X[r>>2]=e,0):4&f?-2:(o=vt(e=xt(e)),0===u?u=2:10===u&&(o=[0,0,er(65535),o]),e=i(u,c,s,null,o,a),X[r>>2]=e,0)}function jn(e){if(p)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var t=Me.ki();if(void 0!==t.xf)throw"Internal error!";if(!e.Zf)throw"Internal error, no pthread ptr!";Me.Jf.push(t);for(var n=Hn(512),r=0;128>r;++r)X[n+4*r>>2]=0;var i=e.Qf+e.bg,o=(r=Me.Df[e.Zf]={worker:t,Qf:e.Qf,bg:e.bg,Jg:e.Jg,Kh:e.Zf,threadInfoStruct:e.Zf}).threadInfoStruct>>2;Atomics.store(V,o,0),Atomics.store(V,o+1,0),Atomics.store(V,o+2,0),Atomics.store(V,o+17,e.detached),Atomics.store(V,o+26,n),Atomics.store(V,o+12,0),Atomics.store(V,o+10,r.threadInfoStruct),Atomics.store(V,o+11,42),Atomics.store(V,o+27,e.bg),Atomics.store(V,o+21,e.bg),Atomics.store(V,o+20,i),Atomics.store(V,o+29,i),Atomics.store(V,o+30,e.detached),Atomics.store(V,o+32,e.Hh),Atomics.store(V,o+33,e.Ih),n=Kn()+40,Atomics.store(V,o+44,n),t.xf=r;var a={cmd:"run",start_routine:e.Li,arg:e.Sf,threadInfoStruct:e.Zf,selfThreadId:e.Zf,parentThreadId:e.Ei,stackBase:e.Qf,stackSize:e.bg};t.ng=function(){a.time=performance.now(),t.postMessage(a,e.Ui)},t.loaded&&(t.ng(),delete t.ng)}function $n(){return 0|_e}function Mn(e){return 0==e%4&&(0!=e%100||0==e%400)}function Tn(e,t){for(var n=0,r=0;r<=t;n+=e[r++]);return n}n._pthread_self=$n;var Dn=[31,29,31,30,31,30,31,31,30,31,30,31],Cn=[31,28,31,30,31,30,31,31,30,31,30,31];function Fn(e,t){for(e=new Date(e.getTime());0r-e.getDate())){e.setDate(e.getDate()+t);break}t-=r-e.getDate()+1,e.setDate(1),11>n?e.setMonth(n+1):(e.setMonth(0),e.setFullYear(e.getFullYear()+1))}return e}function On(e){if(p)return cn(30,1,e);switch(e){case 30:case 75:return 16384;case 85:return q.length/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return Te(28),-1}function In(e,t,n,r){e||(e=this),this.parent=e,this.hf=e.hf,this.kg=null,this.id=Ve.zi++,this.name=t,this.mode=n,this.bf={},this.cf={},this.rdev=r}Object.defineProperties(In.prototype,{read:{get:function(){return 365==(365&this.mode)},set:function(e){e?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146==(146&this.mode)},set:function(e){e?this.mode|=146:this.mode&=-147}},si:{get:function(){return Ve.jf(this.mode)}},Tg:{get:function(){return Ve.gg(this.mode)}}}),Ve.Nh=In,Ve.Mi();for(var Pn,Ln,Rn=0;32>Rn;++Rn)Jt.push(Array(Rn));var Nn=new Float32Array(288);for(Rn=0;288>Rn;++Rn)fn[Rn]=Nn.subarray(0,Rn+1);var Bn=new Int32Array(288);for(Rn=0;288>Rn;++Rn)un[Rn]=Bn.subarray(0,Rn+1);var Un=[null,Ce,Oe,tt,nt,rt,it,ot,at,ft,ut,ct,st,lt,dt,ht,pt,mt,gt,wt,Tt,Dt,Ct,mn,bn,_n,kn,An,xn,Sn,On];function zn(e,t){var n=Array(N(e)+1);return e=R(e,n,0,n.length),t&&(n.length=e),n}p||ne.push({uh:function(){Wn()}});var Gn={c:function(e,t,n,r){de("Assertion failed: "+L(e)+", at: "+[t?L(t):"unknown filename",n,r?L(r):"unknown function"])},K:function(e,t){if(e=Zn(e,t),!S)return postMessage({cmd:"exitProcess",returnCode:e}),e},W:function(e,t){return De(e,t)},aa:function(e,t){return Ce(e,t)},wa:function(e,t){return Fe(e,t)},va:function(e,t){return Ie(e,t)},Ma:tt,Ea:nt,u:rt,Na:it,Ka:ot,Ha:at,V:ft,Oa:ut,Pa:ct,za:st,Aa:lt,Da:function(){return-63},Y:dt,La:ht,Ja:pt,Ca:mt,xa:gt,Ga:wt,Ia:function(){return 0},t:Tt,X:Dt,Fa:function(e){try{if(!e)return-21;var t={__size__:390,sysname:0,nodename:65,release:130,version:195,machine:260,domainname:325};return z("Emscripten",e+t.sysname),z("emscripten",e+t.nodename),z("1.0",e+t.release),z("#1",e+t.version),z("x86-JS",e+t.machine),0}catch(e){return void 0!==Ve&&e instanceof Ve.$e||de(e),-e.df}},Ba:Ct,qa:function(e,t){if(e==t)postMessage({cmd:"processQueuedMainThreadWork"});else if(p)postMessage({targetThread:e,cmd:"processThreadQueue"});else{if(!(e=(e=Me.Df[e])&&e.worker))return;e.postMessage({cmd:"processThreadQueue"})}return 1},b:function(){de()},Qa:function e(){return void 0===e.start&&(e.start=Date.now()),1e3*(Date.now()-e.start)|0},Ta:De,$:function(){de("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},Ua:function(){de("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},F:function(e,t,n){var r;for(ln.length=0,n>>=2;r=q[t++];)(r=105>r)&&1&n&&n++,ln.push(r?J[n++>>1]:X[n]),++n;return ve[e].apply(null,ln)},ra:Ft,I:function(){},A:Ot,p:Ee,z:$e,Ed:function(e){Ln.activeTexture(e)},Dd:function(e,t){Ln.attachShader(Lt[e],zt[t])},fa:function(e,t){Ln.tf.beginQueryEXT(e,Wt[t])},Cd:function(e,t,n){Ln.bindAttribLocation(Lt[e],t,L(n))},Bd:function(e,t){Ln.bindBuffer(e,Pt[t])},Ad:function(e,t){Ln.bindFramebuffer(e,Rt[t])},zd:function(e,t){Ln.bindRenderbuffer(e,Nt[t])},yd:function(e,t){Ln.bindTexture(e,Bt[t])},Md:function(e){Ln.bindVertexArray(Gt[e])},xd:function(e,t,n,r){Ln.blendColor(e,t,n,r)},wd:function(e){Ln.blendEquation(e)},vd:function(e,t){Ln.blendEquationSeparate(e,t)},ud:function(e,t){Ln.blendFunc(e,t)},td:function(e,t,n,r){Ln.blendFuncSeparate(e,t,n,r)},sd:function(e,t,n,r){Ln.bufferData(e,n?q.subarray(n,n+t):t,r)},rd:function(e,t,n,r){Ln.bufferSubData(e,t,q.subarray(r,r+n))},qd:function(e){return Ln.checkFramebufferStatus(e)},pd:function(e){Ln.clear(e)},od:function(e,t,n,r){Ln.clearColor(e,t,n,r)},nd:function(e){Ln.clearDepth(e)},md:function(e){Ln.clearStencil(e)},ld:function(e,t,n,r){Ln.colorMask(!!e,!!t,!!n,!!r)},kd:function(e){Ln.compileShader(zt[e])},jd:function(e,t,n,r,i,o,a,f){Ln.compressedTexImage2D(e,t,n,r,i,o,f?q.subarray(f,f+a):null)},id:function(e,t,n,r,i,o,a,f,u){Ln.compressedTexSubImage2D(e,t,n,r,i,o,a,u?q.subarray(u,u+f):null)},hd:function(e,t,n,r,i,o,a,f){Ln.copyTexImage2D(e,t,n,r,i,o,a,f)},gd:function(e,t,n,r,i,o,a,f){Ln.copyTexSubImage2D(e,t,n,r,i,o,a,f)},fd:function(){var e=Vt(Lt),t=Ln.createProgram();return t.name=e,Lt[e]=t,e},ed:function(e){var t=Vt(zt);return zt[t]=Ln.createShader(e),t},dd:function(e){Ln.cullFace(e)},cd:function(e,t){for(var n=0;n>2],i=Pt[r];i&&(Ln.deleteBuffer(i),i.name=0,Pt[r]=null)}},bd:function(e,t){for(var n=0;n>2],i=Rt[r];i&&(Ln.deleteFramebuffer(i),i.name=0,Rt[r]=null)}},ad:function(e){if(e){var t=Lt[e];t?(Ln.deleteProgram(t),t.name=0,Lt[e]=null,qt[e]=null):Xt(1281)}},ha:function(e,t){for(var n=0;n>2],i=Wt[r];i&&(Ln.tf.deleteQueryEXT(i),Wt[r]=null)}},$c:function(e,t){for(var n=0;n>2],i=Nt[r];i&&(Ln.deleteRenderbuffer(i),i.name=0,Nt[r]=null)}},_c:function(e){if(e){var t=zt[e];t?(Ln.deleteShader(t),zt[e]=null):Xt(1281)}},Zc:function(e,t){for(var n=0;n>2],i=Bt[r];i&&(Ln.deleteTexture(i),i.name=0,Bt[r]=null)}},Ld:function(e,t){for(var n=0;n>2];Ln.deleteVertexArray(Gt[r]),Gt[r]=null}},Yc:function(e){Ln.depthFunc(e)},Xc:function(e){Ln.depthMask(!!e)},Wc:function(e,t){Ln.depthRange(e,t)},Vc:function(e,t){Ln.detachShader(Lt[e],zt[t])},Uc:function(e){Ln.disable(e)},Tc:function(e){Ln.disableVertexAttribArray(e)},Sc:function(e,t,n){Ln.drawArrays(e,t,n)},Hd:function(e,t,n,r){Ln.drawArraysInstanced(e,t,n,r)},Id:function(e,t){for(var n=Jt[e],r=0;r>2];Ln.drawBuffers(n)},Rc:function(e,t,n,r){Ln.drawElements(e,t,n,r)},Gd:function(e,t,n,r,i){Ln.drawElementsInstanced(e,t,n,r,i)},Qc:function(e){Ln.enable(e)},Pc:function(e){Ln.enableVertexAttribArray(e)},ea:function(e){Ln.tf.endQueryEXT(e)},Oc:function(){Ln.finish()},Nc:function(){Ln.flush()},Mc:function(e,t,n,r){Ln.framebufferRenderbuffer(e,t,n,Nt[r])},Lc:function(e,t,n,r,i){Ln.framebufferTexture2D(e,t,n,Bt[r],i)},Kc:function(e){Ln.frontFace(e)},Jc:function(e,t){Zt(e,t,"createBuffer",Pt)},Hc:function(e,t){Zt(e,t,"createFramebuffer",Rt)},ia:function(e,t){for(var n=0;n>2]=0;break}var i=Vt(Wt);r.name=i,Wt[i]=r,X[t+4*n>>2]=i}},Gc:function(e,t){Zt(e,t,"createRenderbuffer",Nt)},Fc:function(e,t){Zt(e,t,"createTexture",Bt)},Kd:function(e,t){Zt(e,t,"createVertexArray",Gt)},Ic:function(e){Ln.generateMipmap(e)},Ec:function(e,t,n,r,i,o,a){Kt("getActiveAttrib",e,t,n,r,i,o,a)},Dc:function(e,t,n,r,i,o,a){Kt("getActiveUniform",e,t,n,r,i,o,a)},Cc:function(e,t,n,r){var i=(e=Ln.getAttachedShaders(Lt[e])).length;for(i>t&&(i=t),X[n>>2]=i,t=0;t>2]=zt.indexOf(e[t])},Bc:function(e,t){return Ln.getAttribLocation(Lt[e],L(t))},Ac:function(e,t){tn(e,t,4)},zc:function(e,t,n){n?X[n>>2]=Ln.getBufferParameter(e,t):Xt(1281)},yc:function(){var e=Ln.getError()||Qt;return Qt=0,e},xc:function(e,t){tn(e,t,2)},wc:function(e,t,n,r){((e=Ln.getFramebufferAttachmentParameter(e,t,n))instanceof WebGLRenderbuffer||e instanceof WebGLTexture)&&(e=0|e.name),X[r>>2]=e},vc:function(e,t){tn(e,t,0)},tc:function(e,t,n,r){null===(e=Ln.getProgramInfoLog(Lt[e]))&&(e="(unknown error)"),t=0>2]=t)},uc:function(e,t,n){if(n)if(e>=It)Xt(1281);else{var r=qt[e];if(r)if(35716==t)null===(e=Ln.getProgramInfoLog(Lt[e]))&&(e="(unknown error)"),X[n>>2]=e.length+1;else if(35719==t)X[n>>2]=r.Wg;else if(35722==t){if(-1==r.ig){e=Lt[e];var i=Ln.getProgramParameter(e,35721);for(t=r.ig=0;t>2]=r.ig}else if(35381==t){if(-1==r.jg)for(e=Lt[e],i=Ln.getProgramParameter(e,35382),t=r.jg=0;t>2]=r.jg}else X[n>>2]=Ln.getProgramParameter(Lt[e],t);else Xt(1282)}else Xt(1281)},Od:function(e,t,n){n?en(n,"boolean"==typeof(e=Ln.tf.getQueryObjectEXT(Wt[e],t))?e?1:0:e):Xt(1281)},Qd:function(e,t,n){var r;n?(r="boolean"==typeof(e=Ln.tf.getQueryObjectEXT(Wt[e],t))?e?1:0:e,X[n>>2]=r):Xt(1281)},Nd:function(e,t,n){n?en(n,"boolean"==typeof(e=Ln.tf.getQueryObjectEXT(Wt[e],t))?e?1:0:e):Xt(1281)},Pd:function(e,t,n){var r;n?(r="boolean"==typeof(e=Ln.tf.getQueryObjectEXT(Wt[e],t))?e?1:0:e,X[n>>2]=r):Xt(1281)},ca:function(e,t,n){n?X[n>>2]=Ln.tf.getQueryEXT(e,t):Xt(1281)},sc:function(e,t,n){n?X[n>>2]=Ln.getRenderbufferParameter(e,t):Xt(1281)},qc:function(e,t,n,r){null===(e=Ln.getShaderInfoLog(zt[e]))&&(e="(unknown error)"),t=0>2]=t)},pc:function(e,t,n,r){e=Ln.getShaderPrecisionFormat(e,t),X[n>>2]=e.rangeMin,X[n+4>>2]=e.rangeMax,X[r>>2]=e.precision},oc:function(e,t,n,r){(e=Ln.getShaderSource(zt[e]))&&(t=0>2]=t))},rc:function(e,t,n){n?35716==t?(null===(e=Ln.getShaderInfoLog(zt[e]))&&(e="(unknown error)"),X[n>>2]=e?e.length+1:0):35720==t?(e=Ln.getShaderSource(zt[e]),X[n>>2]=e?e.length+1:0):X[n>>2]=Ln.getShaderParameter(zt[e],t):Xt(1281)},nc:function(e){if(Ht[e])return Ht[e];switch(e){case 7939:var t=Ln.getSupportedExtensions()||[];t=nn((t=t.concat(t.map((function(e){return"GL_"+e})))).join(" "));break;case 7936:case 7937:case 37445:case 37446:(t=Ln.getParameter(e))||Xt(1280),t=nn(t);break;case 7938:t=nn("OpenGL ES 2.0 ("+Ln.getParameter(7938)+")");break;case 35724:var n=(t=Ln.getParameter(35724)).match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==n&&(3==n[1].length&&(n[1]+="0"),t="OpenGL ES GLSL ES "+n[1]+" ("+t+")"),t=nn(t);break;default:return Xt(1280),0}return Ht[e]=t},mc:function(e,t,n){n?Q[n>>2]=Ln.getTexParameter(e,t):Xt(1281)},lc:function(e,t,n){n?X[n>>2]=Ln.getTexParameter(e,t):Xt(1281)},ic:function(e,t){var n=0;if("]"==(t=L(t))[t.length-1]){var r=t.lastIndexOf("[");n="]"!=t[r+1]?parseInt(t.slice(r+1)):0,t=t.slice(0,r)}return(e=qt[e]&&qt[e].Mh[t])&&0<=n&&n>2]=Ln.getVertexAttribOffset(e,t):Xt(1281)},hc:function(e,t,n){on(e,t,n,2)},gc:function(e,t,n){on(e,t,n,5)},ec:function(e,t){Ln.hint(e,t)},dc:function(e){return(e=Pt[e])?Ln.isBuffer(e):0},cc:function(e){return Ln.isEnabled(e)},bc:function(e){return(e=Rt[e])?Ln.isFramebuffer(e):0},ac:function(e){return(e=Lt[e])?Ln.isProgram(e):0},ga:function(e){return(e=Wt[e])?Ln.tf.isQueryEXT(e):0},$b:function(e){return(e=Nt[e])?Ln.isRenderbuffer(e):0},_b:function(e){return(e=zt[e])?Ln.isShader(e):0},Zb:function(e){return(e=Bt[e])?Ln.isTexture(e):0},Jd:function(e){return(e=Gt[e])?Ln.isVertexArray(e):0},Yb:function(e){Ln.lineWidth(e)},Xb:function(e){Ln.linkProgram(Lt[e]);for(var t=Lt[e],n=(e=qt[e]={Mh:{},Wg:0,ig:-1,jg:-1}).Mh,r=Ln.getProgramParameter(t,35718),i=0;i>2]:-1;i+=L(X[n+4*o>>2],0>a?void 0:a)}Ln.shaderSource(zt[e],i)},Nb:function(e,t,n){Ln.stencilFunc(e,t,n)},Mb:function(e,t,n,r){Ln.stencilFuncSeparate(e,t,n,r)},Lb:function(e){Ln.stencilMask(e)},Kb:function(e,t){Ln.stencilMaskSeparate(e,t)},Jb:function(e,t,n){Ln.stencilOp(e,t,n)},Ib:function(e,t,n,r){Ln.stencilOpSeparate(e,t,n,r)},Hb:function(e,t,n,r,i,o,a,f,u){Ln.texImage2D(e,t,n,r,i,o,a,f,u?an(f,a,r,i,u):null)},Gb:function(e,t,n){Ln.texParameterf(e,t,n)},Fb:function(e,t,n){Ln.texParameterf(e,t,Q[n>>2])},Eb:function(e,t,n){Ln.texParameteri(e,t,n)},Db:function(e,t,n){Ln.texParameteri(e,t,X[n>>2])},Cb:function(e,t,n,r,i,o,a,f,u){var c=null;u&&(c=an(f,a,i,o,u)),Ln.texSubImage2D(e,t,n,r,i,o,a,f,c)},Bb:function(e,t){Ln.uniform1f(Ut[e],t)},Ab:function(e,t,n){if(288>=t)for(var r=fn[t-1],i=0;i>2];else r=Q.subarray(n>>2,n+4*t>>2);Ln.uniform1fv(Ut[e],r)},zb:function(e,t){Ln.uniform1i(Ut[e],t)},yb:function(e,t,n){if(288>=t)for(var r=un[t-1],i=0;i>2];else r=X.subarray(n>>2,n+4*t>>2);Ln.uniform1iv(Ut[e],r)},xb:function(e,t,n){Ln.uniform2f(Ut[e],t,n)},wb:function(e,t,n){if(144>=t)for(var r=fn[2*t-1],i=0;i<2*t;i+=2)r[i]=Q[n+4*i>>2],r[i+1]=Q[n+(4*i+4)>>2];else r=Q.subarray(n>>2,n+8*t>>2);Ln.uniform2fv(Ut[e],r)},vb:function(e,t,n){Ln.uniform2i(Ut[e],t,n)},ub:function(e,t,n){if(144>=t)for(var r=un[2*t-1],i=0;i<2*t;i+=2)r[i]=X[n+4*i>>2],r[i+1]=X[n+(4*i+4)>>2];else r=X.subarray(n>>2,n+8*t>>2);Ln.uniform2iv(Ut[e],r)},tb:function(e,t,n,r){Ln.uniform3f(Ut[e],t,n,r)},sb:function(e,t,n){if(96>=t)for(var r=fn[3*t-1],i=0;i<3*t;i+=3)r[i]=Q[n+4*i>>2],r[i+1]=Q[n+(4*i+4)>>2],r[i+2]=Q[n+(4*i+8)>>2];else r=Q.subarray(n>>2,n+12*t>>2);Ln.uniform3fv(Ut[e],r)},rb:function(e,t,n,r){Ln.uniform3i(Ut[e],t,n,r)},qb:function(e,t,n){if(96>=t)for(var r=un[3*t-1],i=0;i<3*t;i+=3)r[i]=X[n+4*i>>2],r[i+1]=X[n+(4*i+4)>>2],r[i+2]=X[n+(4*i+8)>>2];else r=X.subarray(n>>2,n+12*t>>2);Ln.uniform3iv(Ut[e],r)},pb:function(e,t,n,r,i){Ln.uniform4f(Ut[e],t,n,r,i)},ob:function(e,t,n){if(72>=t){var r=fn[4*t-1];n>>=2;for(var i=0;i<4*t;i+=4){var o=n+i;r[i]=Q[o],r[i+1]=Q[o+1],r[i+2]=Q[o+2],r[i+3]=Q[o+3]}}else r=Q.subarray(n>>2,n+16*t>>2);Ln.uniform4fv(Ut[e],r)},nb:function(e,t,n,r,i){Ln.uniform4i(Ut[e],t,n,r,i)},mb:function(e,t,n){if(72>=t)for(var r=un[4*t-1],i=0;i<4*t;i+=4)r[i]=X[n+4*i>>2],r[i+1]=X[n+(4*i+4)>>2],r[i+2]=X[n+(4*i+8)>>2],r[i+3]=X[n+(4*i+12)>>2];else r=X.subarray(n>>2,n+16*t>>2);Ln.uniform4iv(Ut[e],r)},lb:function(e,t,n,r){if(72>=t)for(var i=fn[4*t-1],o=0;o<4*t;o+=4)i[o]=Q[r+4*o>>2],i[o+1]=Q[r+(4*o+4)>>2],i[o+2]=Q[r+(4*o+8)>>2],i[o+3]=Q[r+(4*o+12)>>2];else i=Q.subarray(r>>2,r+16*t>>2);Ln.uniformMatrix2fv(Ut[e],!!n,i)},kb:function(e,t,n,r){if(32>=t)for(var i=fn[9*t-1],o=0;o<9*t;o+=9)i[o]=Q[r+4*o>>2],i[o+1]=Q[r+(4*o+4)>>2],i[o+2]=Q[r+(4*o+8)>>2],i[o+3]=Q[r+(4*o+12)>>2],i[o+4]=Q[r+(4*o+16)>>2],i[o+5]=Q[r+(4*o+20)>>2],i[o+6]=Q[r+(4*o+24)>>2],i[o+7]=Q[r+(4*o+28)>>2],i[o+8]=Q[r+(4*o+32)>>2];else i=Q.subarray(r>>2,r+36*t>>2);Ln.uniformMatrix3fv(Ut[e],!!n,i)},jb:function(e,t,n,r){if(18>=t){var i=fn[16*t-1];r>>=2;for(var o=0;o<16*t;o+=16){var a=r+o;i[o]=Q[a],i[o+1]=Q[a+1],i[o+2]=Q[a+2],i[o+3]=Q[a+3],i[o+4]=Q[a+4],i[o+5]=Q[a+5],i[o+6]=Q[a+6],i[o+7]=Q[a+7],i[o+8]=Q[a+8],i[o+9]=Q[a+9],i[o+10]=Q[a+10],i[o+11]=Q[a+11],i[o+12]=Q[a+12],i[o+13]=Q[a+13],i[o+14]=Q[a+14],i[o+15]=Q[a+15]}}else i=Q.subarray(r>>2,r+64*t>>2);Ln.uniformMatrix4fv(Ut[e],!!n,i)},ib:function(e){Ln.useProgram(Lt[e])},hb:function(e){Ln.validateProgram(Lt[e])},gb:function(e,t){Ln.vertexAttrib1f(e,t)},fb:function(e,t){Ln.vertexAttrib1f(e,Q[t>>2])},eb:function(e,t,n){Ln.vertexAttrib2f(e,t,n)},db:function(e,t){Ln.vertexAttrib2f(e,Q[t>>2],Q[t+4>>2])},cb:function(e,t,n,r){Ln.vertexAttrib3f(e,t,n,r)},bb:function(e,t){Ln.vertexAttrib3f(e,Q[t>>2],Q[t+4>>2],Q[t+8>>2])},ab:function(e,t,n,r,i){Ln.vertexAttrib4f(e,t,n,r,i)},$a:function(e,t){Ln.vertexAttrib4f(e,Q[t>>2],Q[t+4>>2],Q[t+8>>2],Q[t+12>>2])},Fd:function(e,t){Ln.vertexAttribDivisor(e,t)},_a:function(e,t,n,r,i,o){Ln.vertexAttribPointer(e,t,n,!!r,i,o)},Za:function(e,t,n,r){Ln.viewport(e,t,n,r)},la:function(){return"undefined"!=typeof SharedArrayBuffer},G:function(){return 0|Ae},R:function(){return 0|ke},f:function(e,t){throw fr(e,t||1),"longjmp"},ka:function(e,t,n){q.copyWithin(e,t,t+n)},na:function(e,t,n){sn.length=t,n>>=3;for(var r=0;re?ve[-e-1]:Un[e]).apply(null,sn)},sa:function(){de("OOM")},oa:function(e,t,n){return hn(e)?pn(e,t,n):mn(e,t,n)},Q:function(){},ma:function(){},pa:function(e,t){var n={};if(t>>=2,n.alpha=!!X[t],n.depth=!!X[t+1],n.stencil=!!X[t+2],n.antialias=!!X[t+3],n.premultipliedAlpha=!!X[t+4],n.preserveDrawingBuffer=!!X[t+5],n.powerPreference=wn[X[t+6]],n.failIfMajorPerformanceCaveat=!!X[t+7],n.vi=X[t+8],n.oj=X[t+9],n.ph=X[t+10],n.gi=X[t+11],n.tj=X[t+12],n.uj=X[t+13],!(e=hn(e))||n.gi)n=0;else if(e=e.getContext("webgl",n)){t=Hn(8),X[t+4>>2]=0|_e;var r={ij:t,attributes:n,version:n.vi,pg:e};e.canvas&&(e.canvas.qg=r),(void 0===n.ph||n.ph)&&function(e){if(e||(e=void 0),!e.ni){e.ni=!0;var t=e.pg;!function(e){var t=e.getExtension("ANGLE_instanced_arrays");t&&(e.vertexAttribDivisor=function(e,n){t.vertexAttribDivisorANGLE(e,n)},e.drawArraysInstanced=function(e,n,r,i){t.drawArraysInstancedANGLE(e,n,r,i)},e.drawElementsInstanced=function(e,n,r,i,o){t.drawElementsInstancedANGLE(e,n,r,i,o)})}(t),function(e){var t=e.getExtension("OES_vertex_array_object");t&&(e.createVertexArray=function(){return t.createVertexArrayOES()},e.deleteVertexArray=function(e){t.deleteVertexArrayOES(e)},e.bindVertexArray=function(e){t.bindVertexArrayOES(e)},e.isVertexArray=function(e){return t.isVertexArrayOES(e)})}(t),function(e){var t=e.getExtension("WEBGL_draw_buffers");t&&(e.drawBuffers=function(e,n){t.drawBuffersWEBGL(e,n)})}(t),t.tf=t.getExtension("EXT_disjoint_timer_query"),t.qj=t.getExtension("WEBGL_multi_draw");var n="OES_texture_float OES_texture_half_float OES_standard_derivatives OES_vertex_array_object WEBGL_compressed_texture_s3tc WEBGL_depth_texture OES_element_index_uint EXT_texture_filter_anisotropic EXT_frag_depth WEBGL_draw_buffers ANGLE_instanced_arrays OES_texture_float_linear OES_texture_half_float_linear EXT_blend_minmax EXT_shader_texture_lod EXT_texture_norm16 WEBGL_compressed_texture_pvrtc EXT_color_buffer_half_float WEBGL_color_buffer_float EXT_sRGB WEBGL_compressed_texture_etc1 EXT_disjoint_timer_query WEBGL_compressed_texture_etc WEBGL_compressed_texture_astc EXT_color_buffer_float WEBGL_compressed_texture_s3tc_srgb EXT_disjoint_timer_query_webgl2 WEBKIT_WEBGL_compressed_texture_pvrtc".split(" ");(t.getSupportedExtensions()||[]).forEach((function(e){-1!=n.indexOf(e)&&t.getExtension(e)}))}}(r),n=t}else n=0;return n},ta:function(e,t){var n=0;return vn().forEach((function(r,i){var o=t+n;X[e+4*i>>2]=o,z(r,o),n+=r.length+1})),0},ua:function(e,t){var n=vn();X[e>>2]=n.length;var r=0;return n.forEach((function(e){r+=e.length+1})),X[t>>2]=r,0},D:function(e){kr(e)},H:bn,U:_n,ya:kn,Va:An,M:xn,B:function e(t){e.buffer||(e.buffer=Hn(256),En[0]="Success",En[-1]="Invalid value for 'ai_flags' field",En[-2]="NAME or SERVICE is unknown",En[-3]="Temporary failure in name resolution",En[-4]="Non-recoverable failure in name res",En[-6]="'ai_family' not supported",En[-7]="'ai_socktype' not supported",En[-8]="SERVICE not supported for 'ai_socktype'",En[-10]="Memory allocation failure",En[-11]="System error returned in 'errno'",En[-12]="Argument buffer overflow");var n="Unknown error";return t in En&&(n=255=r&&(t=!0)}return i&&o&&((n=R(""+e,q,i,o))+1>=o&&(t=!0)),t?-12:0},l:function(e){var t=Date.now();return X[e>>2]=t/1e3|0,X[e+4>>2]=t%1e3*1e3|0,0},r:Fe,ja:function(){Me.oi()},ba:function(e){var t=ir();try{return ee.get(e)()}catch(e){if(or(t),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},j:function(e,t){var n=ir();try{return ee.get(e)(t)}catch(e){if(or(n),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},h:function(e,t,n){var r=ir();try{return ee.get(e)(t,n)}catch(e){if(or(r),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},C:function(e,t,n,r){var i=ir();try{return ee.get(e)(t,n,r)}catch(e){if(or(i),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},P:function(e,t,n,r,i){var o=ir();try{return ee.get(e)(t,n,r,i)}catch(e){if(or(o),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},_:function(e,t,n,r,i,o){var a=ir();try{return ee.get(e)(t,n,r,i,o)}catch(e){if(or(a),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},O:function(e,t,n,r,i,o,a,f,u){var c=ir();try{return ee.get(e)(t,n,r,i,o,a,f,u)}catch(e){if(or(c),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},Xa:function(e,t,n,r,i,o,a,f){var u=ir();try{return gr(e,t,n,r,i,o,a,f)}catch(e){if(or(u),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},Wa:function(e,t,n,r){var i=ir();try{return wr(e,t,n,r)}catch(e){if(or(i),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},k:function(e,t){var n=ir();try{ee.get(e)(t)}catch(e){if(or(n),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},w:function(e,t,n){var r=ir();try{ee.get(e)(t,n)}catch(e){if(or(r),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},J:function(e,t,n,r){var i=ir();try{ee.get(e)(t,n,r)}catch(e){if(or(i),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},g:function(e,t,n,r,i){var o=ir();try{ee.get(e)(t,n,r,i)}catch(e){if(or(o),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},N:function(e,t,n,r,i,o){var a=ir();try{ee.get(e)(t,n,r,i,o)}catch(e){if(or(a),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},Sa:function(e,t,n,r,i,o,a){var f=ir();try{ee.get(e)(t,n,r,i,o,a)}catch(e){if(or(f),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},Z:function(e,t,n,r,i,o,a,f,u){var c=ir();try{ee.get(e)(t,n,r,i,o,a,f,u)}catch(e){if(or(c),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},Ya:function(e,t,n,r,i,o,a,f,u,c){var s=ir();try{mr(e,t,n,r,i,o,a,f,u,c)}catch(e){if(or(s),e!==e+0&&"longjmp"!==e)throw e;fr(1,0)}},q:Ie,a:$||n.wasmMemory,T:function(e){Oe();var t=new Date(X[e+20>>2]+1900,X[e+16>>2],X[e+12>>2],X[e+8>>2],X[e+4>>2],X[e>>2],0),n=X[e+32>>2],r=t.getTimezoneOffset(),i=new Date(t.getFullYear(),0,1),o=new Date(t.getFullYear(),6,1).getTimezoneOffset(),a=i.getTimezoneOffset(),f=Math.min(a,o);return 0>n?X[e+32>>2]=Number(o!=a&&f==r):0>2]=t.getDay(),X[e+28>>2]=(t.getTime()-i.getTime())/864e5|0,t.getTime()/1e3|0},Ra:function(e){return e===Me.Oh?(A("Main thread (id="+e+") cannot be canceled!"),71):e?X[e+12>>2]!==e?(A("pthread_cancel attempted on thread "+e+", which does not point to a valid thread, or does not exist anymore!"),71):(Atomics.compareExchange(V,e>>2,0,2),p?postMessage({cmd:"cancelThread",thread:e}):Se(e),0):(A("pthread_cancel attempted on a null thread pointer!"),71)},S:function(e){var t=Me.Cg.pop();e&&t()},L:function(e,t){Me.Cg.push((function(){ee.get(e)(t)}))},n:function(e,t,n,r){if("undefined"==typeof SharedArrayBuffer)return A("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;if(!e)return A("pthread_create called with a null thread pointer!"),28;var i=[];if(p&&0===i.length)return dr(687865856,e,t,n,r);var o=0,a=0,f=0,u=0;if(t){var c=X[t>>2];if(c+=81920,o=X[t+8>>2],a=0!==X[t+12>>2],0===X[t+16>>2]){var s=X[t+20>>2],l=X[t+24>>2];f=t+20,u=t+24;var d=Me.Lg?Me.Lg:0|_e;if(f||u)if(d)if(X[d+12>>2]!==d)A("pthread_getschedparam attempted on thread "+d+", which does not point to a valid thread, or does not exist anymore!");else{var h=Atomics.load(V,d+128>>2);d=Atomics.load(V,d+132>>2),f&&(X[f>>2]=h),u&&(X[u>>2]=d)}else A("pthread_getschedparam called with a null thread pointer!");f=X[t+20>>2],u=X[t+24>>2],X[t+20>>2]=s,X[t+24>>2]=l}else f=X[t+20>>2],u=X[t+24>>2]}else c=2097152;for((t=0==o)?o=Vn(16,c):F(0<(o-=c)),s=Hn(232),l=0;58>l;++l)V[(s>>2)+l]=0;return X[e>>2]=s,X[s+12>>2]=s,X[(e=s+156)>>2]=e,n={Qf:o,bg:c,Jg:t,Hh:f,Ih:u,detached:a,Li:n,Zf:s,Ei:0|_e,Sf:r,Ui:i},p?(n.Zi="spawnThread",postMessage(n,i)):jn(n),0},o:function(e,t){return function(e,t){if(!e)return A("pthread_join attempted on a null thread pointer!"),71;if(p&&D==e)return A("PThread "+e+" is attempting to join to itself!"),16;if(!p&&Me.wf==e)return A("Main thread "+e+" is attempting to join to itself!"),16;if(X[e+12>>2]!==e)return A("pthread_join attempted on thread "+e+", which does not point to a valid thread, or does not exist anymore!"),71;if(Atomics.load(V,e+68>>2))return A("Attempted to join thread "+e+", which was already detached!"),28;for(Ft();;){var n=Atomics.load(V,e>>2);if(1==n)return n=Atomics.load(V,e+4>>2),t&&(X[t>>2]=n),Atomics.store(V,e+68>>2,1),p?postMessage({cmd:"cleanupThread",thread:e}):je(e),0;if(p&&T&&!Atomics.load(V,T+60>>2)&&2==Atomics.load(V,T+0>>2))throw"Canceled!";p||cr(),Ot(e,n,p?100:1)}}(e,t)},i:$n,e:function(e){j=0|e},E:function(){return 0},m:function(e,t,n,r){function i(e,t,n){for(e="number"==typeof e?e.toString():e||"";e.lengthe?-1:0=a(n,e)?0>=a(t,e)?e.getFullYear()+1:e.getFullYear():e.getFullYear()-1}var c=X[r+40>>2];for(var s in r={Si:X[r>>2],Ri:X[r+4>>2],Dg:X[r+8>>2],og:X[r+12>>2],cg:X[r+16>>2],qf:X[r+20>>2],Eg:X[r+24>>2],Fg:X[r+28>>2],xj:X[r+32>>2],Qi:X[r+36>>2],Ti:c?L(c):""},n=L(n),c={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"})n=n.replace(new RegExp(s,"g"),c[s]);var l="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),d="January February March April May June July August September October November December".split(" ");for(s in c={"%a":function(e){return l[e.Eg].substring(0,3)},"%A":function(e){return l[e.Eg]},"%b":function(e){return d[e.cg].substring(0,3)},"%B":function(e){return d[e.cg]},"%C":function(e){return o((e.qf+1900)/100|0,2)},"%d":function(e){return o(e.og,2)},"%e":function(e){return i(e.og,2," ")},"%g":function(e){return u(e).toString().substring(2)},"%G":function(e){return u(e)},"%H":function(e){return o(e.Dg,2)},"%I":function(e){return 0==(e=e.Dg)?e=12:12e.Dg?"AM":"PM"},"%S":function(e){return o(e.Si,2)},"%t":function(){return"\t"},"%u":function(e){return e.Eg||7},"%U":function(e){var t=new Date(e.qf+1900,0,1),n=0===t.getDay()?t:Fn(t,7-t.getDay());return 0>a(n,e=new Date(e.qf+1900,e.cg,e.og))?o(Math.ceil((31-n.getDate()+(Tn(Mn(e.getFullYear())?Dn:Cn,e.getMonth()-1)-31)+e.getDate())/7),2):0===a(n,t)?"01":"00"},"%V":function(e){var t=new Date(e.qf+1901,0,4),n=f(new Date(e.qf+1900,0,4));t=f(t);var r=Fn(new Date(e.qf+1900,0,1),e.Fg);return 0>a(r,n)?"53":0>=a(t,r)?"01":o(Math.ceil((n.getFullYear()a(n,e=new Date(e.qf+1900,e.cg,e.og))?o(Math.ceil((31-n.getDate()+(Tn(Mn(e.getFullYear())?Dn:Cn,e.getMonth()-1)-31)+e.getDate())/7),2):0===a(n,t)?"01":"00"},"%y":function(e){return(e.qf+1900).toString().substring(2)},"%Y":function(e){return e.qf+1900},"%z":function(e){var t=0<=(e=e.Qi);return e=Math.abs(e)/60,(t?"+":"-")+String("0000"+(e/60*100+e%60)).slice(-4)},"%Z":function(e){return e.Ti},"%%":function(){return"%"}})0<=n.indexOf(s)&&(n=n.replace(new RegExp(s,"g"),c[s](r)));return(s=zn(n,!1)).length>t?0:(W.set(s,e),s.length-1)},y:On,s:function(e){var t=Date.now()/1e3|0;return e&&(X[e>>2]=t),t}};!function(){function e(e,t){n.asm=e.exports,ee=n.asm.Rd,M=t,p||le()}function t(t){e(t.instance,t.module)}function r(e){return(E||!l&&!d||"function"!=typeof fetch||he("file://")?Promise.resolve().then(ge):fetch(me,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+me+"'";return e.arrayBuffer()})).catch((function(){return ge()}))).then((function(e){return WebAssembly.instantiate(e,o)})).then(e,(function(e){A("failed to asynchronously prepare wasm: "+e),de(e)}))}var o={a:Gn};if(p||se(),n.instantiateWasm)try{return n.instantiateWasm(o,e)}catch(e){return A("Module.instantiateWasm callback failed with error: "+e),!1}(E||"function"!=typeof WebAssembly.instantiateStreaming||pe()||he("file://")||"function"!=typeof fetch?r(t):fetch(me,{credentials:"same-origin"}).then((function(e){return WebAssembly.instantiateStreaming(e,o).then(t,(function(e){return A("wasm streaming compile failed: "+e),A("falling back to ArrayBuffer instantiation"),r(t)}))}))).catch(i)}();var Wn=n.___wasm_call_ctors=function(){return(Wn=n.___wasm_call_ctors=n.asm.Sd).apply(null,arguments)},qn=n._free=function(){return(qn=n._free=n.asm.Td).apply(null,arguments)},Hn=n._malloc=function(){return(Hn=n._malloc=n.asm.Ud).apply(null,arguments)},Yn=n.___errno_location=function(){return(Yn=n.___errno_location=n.asm.Vd).apply(null,arguments)},Xn=n._memset=function(){return(Xn=n._memset=n.asm.Wd).apply(null,arguments)};n._fflush=function(){return(n._fflush=n.asm.Xd).apply(null,arguments)};var Vn=n._memalign=function(){return(Vn=n._memalign=n.asm.Yd).apply(null,arguments)},Qn=n._ntohs=function(){return(Qn=n._ntohs=n.asm.Zd).apply(null,arguments)},Jn=n._htons=function(){return(Jn=n._htons=n.asm._d).apply(null,arguments)},Zn=n._main=function(){return(Zn=n._main=n.asm.$d).apply(null,arguments)},Kn=n._emscripten_get_global_libc=function(){return(Kn=n._emscripten_get_global_libc=n.asm.ae).apply(null,arguments)};n.___em_js__initPthreadsJS=function(){return(n.___em_js__initPthreadsJS=n.asm.be).apply(null,arguments)};var er=n._htonl=function(){return(er=n._htonl=n.asm.ce).apply(null,arguments)},tr=n.__get_tzname=function(){return(tr=n.__get_tzname=n.asm.de).apply(null,arguments)},nr=n.__get_daylight=function(){return(nr=n.__get_daylight=n.asm.ee).apply(null,arguments)},rr=n.__get_timezone=function(){return(rr=n.__get_timezone=n.asm.fe).apply(null,arguments)},ir=n.stackSave=function(){return(ir=n.stackSave=n.asm.ge).apply(null,arguments)},or=n.stackRestore=function(){return(or=n.stackRestore=n.asm.he).apply(null,arguments)},ar=n.stackAlloc=function(){return(ar=n.stackAlloc=n.asm.ie).apply(null,arguments)},fr=n._setThrew=function(){return(fr=n._setThrew=n.asm.je).apply(null,arguments)};n._emscripten_main_browser_thread_id=function(){return(n._emscripten_main_browser_thread_id=n.asm.ke).apply(null,arguments)};var ur=n.___pthread_tsd_run_dtors=function(){return(ur=n.___pthread_tsd_run_dtors=n.asm.le).apply(null,arguments)},cr=n._emscripten_main_thread_process_queued_calls=function(){return(cr=n._emscripten_main_thread_process_queued_calls=n.asm.me).apply(null,arguments)};n._emscripten_current_thread_process_queued_calls=function(){return(n._emscripten_current_thread_process_queued_calls=n.asm.ne).apply(null,arguments)};var sr=n._emscripten_register_main_browser_thread_id=function(){return(sr=n._emscripten_register_main_browser_thread_id=n.asm.oe).apply(null,arguments)},lr=n._do_emscripten_dispatch_to_thread=function(){return(lr=n._do_emscripten_dispatch_to_thread=n.asm.pe).apply(null,arguments)};n._emscripten_async_run_in_main_thread=function(){return(n._emscripten_async_run_in_main_thread=n.asm.qe).apply(null,arguments)},n._emscripten_sync_run_in_main_thread=function(){return(n._emscripten_sync_run_in_main_thread=n.asm.re).apply(null,arguments)},n._emscripten_sync_run_in_main_thread_0=function(){return(n._emscripten_sync_run_in_main_thread_0=n.asm.se).apply(null,arguments)},n._emscripten_sync_run_in_main_thread_1=function(){return(n._emscripten_sync_run_in_main_thread_1=n.asm.te).apply(null,arguments)},n._emscripten_sync_run_in_main_thread_2=function(){return(n._emscripten_sync_run_in_main_thread_2=n.asm.ue).apply(null,arguments)},n._emscripten_sync_run_in_main_thread_xprintf_varargs=function(){return(n._emscripten_sync_run_in_main_thread_xprintf_varargs=n.asm.ve).apply(null,arguments)},n._emscripten_sync_run_in_main_thread_3=function(){return(n._emscripten_sync_run_in_main_thread_3=n.asm.we).apply(null,arguments)};var dr=n._emscripten_sync_run_in_main_thread_4=function(){return(dr=n._emscripten_sync_run_in_main_thread_4=n.asm.xe).apply(null,arguments)};n._emscripten_sync_run_in_main_thread_5=function(){return(n._emscripten_sync_run_in_main_thread_5=n.asm.ye).apply(null,arguments)},n._emscripten_sync_run_in_main_thread_6=function(){return(n._emscripten_sync_run_in_main_thread_6=n.asm.ze).apply(null,arguments)},n._emscripten_sync_run_in_main_thread_7=function(){return(n._emscripten_sync_run_in_main_thread_7=n.asm.Ae).apply(null,arguments)};var hr=n._emscripten_run_in_main_runtime_thread_js=function(){return(hr=n._emscripten_run_in_main_runtime_thread_js=n.asm.Be).apply(null,arguments)},pr=n.__emscripten_call_on_thread=function(){return(pr=n.__emscripten_call_on_thread=n.asm.Ce).apply(null,arguments)};n._proxy_main=function(){return(n._proxy_main=n.asm.De).apply(null,arguments)},n._emscripten_tls_init=function(){return(n._emscripten_tls_init=n.asm.Ee).apply(null,arguments)},n.dynCall_ijiii=function(){return(n.dynCall_ijiii=n.asm.Fe).apply(null,arguments)};var mr=n.dynCall_vijjjid=function(){return(mr=n.dynCall_vijjjid=n.asm.Ge).apply(null,arguments)},gr=n.dynCall_iiiijj=function(){return(gr=n.dynCall_iiiijj=n.asm.He).apply(null,arguments)};n.dynCall_iiijiii=function(){return(n.dynCall_iiijiii=n.asm.Ie).apply(null,arguments)},n.dynCall_jiiii=function(){return(n.dynCall_jiiii=n.asm.Je).apply(null,arguments)},n.dynCall_jii=function(){return(n.dynCall_jii=n.asm.Ke).apply(null,arguments)};var wr=n.dynCall_iij=function(){return(wr=n.dynCall_iij=n.asm.Le).apply(null,arguments)};n.dynCall_viiijj=function(){return(n.dynCall_viiijj=n.asm.Me).apply(null,arguments)},n.dynCall_jij=function(){return(n.dynCall_jij=n.asm.Ne).apply(null,arguments)},n.dynCall_jiji=function(){return(n.dynCall_jiji=n.asm.Oe).apply(null,arguments)},n.dynCall_iiiji=function(){return(n.dynCall_iiiji=n.asm.Pe).apply(null,arguments)},n.dynCall_iiiiij=function(){return(n.dynCall_iiiiij=n.asm.Qe).apply(null,arguments)},n.dynCall_jiiij=function(){return(n.dynCall_jiiij=n.asm.Re).apply(null,arguments)},n.dynCall_iiijjji=function(){return(n.dynCall_iiijjji=n.asm.Se).apply(null,arguments)},n.dynCall_iiiiiij=function(){return(n.dynCall_iiiiiij=n.asm.Te).apply(null,arguments)},n.dynCall_jiiji=function(){return(n.dynCall_jiiji=n.asm.Ue).apply(null,arguments)},n.dynCall_viiiiijji=function(){return(n.dynCall_viiiiijji=n.asm.Ve).apply(null,arguments)},n.dynCall_viiiji=function(){return(n.dynCall_viiiji=n.asm.We).apply(null,arguments)},n.dynCall_jiiiii=function(){return(n.dynCall_jiiiii=n.asm.Xe).apply(null,arguments)},n.dynCall_jiii=function(){return(n.dynCall_jiii=n.asm.Ye).apply(null,arguments)},n.dynCall_jiiiiii=function(){return(n.dynCall_jiiiiii=n.asm.Ze).apply(null,arguments)},n._ff_h264_cabac_tables=2115942;var yr,vr=n._main_thread_futex=16983448;function br(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}function _r(e){function t(){if(!yr&&(yr=!0,n.calledRun=!0,!C)){if(n.noFSInit||Ve.fg.Sg||Ve.fg(),yt.root=Ve.hf(yt,{},null),be(ne),p||(Ve.Ah=!1,be(re)),r(n),n.onRuntimeInitialized&&n.onRuntimeInitialized(),Ar){var t=e,i=(t=t||[]).length+1,o=ar(4*(i+1));X[o>>2]=U(u);for(var a=1;a>2)+a]=U(t[a-1]);X[(o>>2)+i]=0,n._proxy_main(i,o)}if(!p){if(n.postRun)for("function"==typeof n.postRun&&(n.postRun=[n.postRun]);n.postRun.length;)t=n.postRun.shift(),oe.unshift(t);be(oe)}}}if(e=e||f,!(0>0]=t;break;case"i16":H[e>>1]=t;break;case"i32":X[e>>2]=t;break;case"i64":ye=[t>>>0,(we=t,1<=+Math.abs(we)?0>>0:~~+Math.ceil((we-+(~~we>>>0))/4294967296)>>>0:0)],X[e>>2]=ye[0],X[e+4>>2]=ye[1];break;case"float":Q[e>>2]=t;break;case"double":J[e>>3]=t;break;default:de("invalid type for setValue: "+n)}},n.writeAsciiToMemory=z,n.FS=Ve,n.PThread=Me,n.PThread=Me,n._pthread_self=$n,n.wasmMemory=$,n.ExitStatus=br,ce=function e(){yr||_r(),yr||(ce=e)},n.run=_r,n.preInit)for("function"==typeof n.preInit&&(n.preInit=[n.preInit]);0>2,e instanceof Module.ExitStatus?e.status:-2),Atomics.store(Module.HEAPU32,threadInfoStruct+0>>2,1),Module._emscripten_futex_wake(threadInfoStruct+0,2147483647),!(e instanceof Module.ExitStatus)))throw e}}else"cancel"===e.data.cmd?threadInfoStruct&&Module.PThread.threadCancel():"setimmediate"===e.data.target||("processThreadQueue"===e.data.cmd?threadInfoStruct&&Module._emscripten_current_thread_process_queued_calls():(err("worker.js received unknown command "+e.data.cmd),err(e.data)))}catch(e){throw err("worker.js onmessage() captured an uncaught exception: "+e),e&&e.stack&&err(e.stack),e}},"object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node){self={location:{href:__filename}};var onmessage=this.onmessage,nodeWorkerThreads=require("worker_threads");global.Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",(function(e){onmessage({data:e})}));var nodeFS=require("fs"),nodeRead=function(e){return nodeFS.readFileSync(e,"utf8")};function globalEval(e){global.require=require,global.Module=Module,eval.call(null,e)}importScripts=function(e){globalEval(nodeRead(e))},postMessage=function(e){parentPort.postMessage(e)},"undefined"==typeof performance&&(performance={now:function(){return Date.now()}})} \ No newline at end of file diff --git a/build/assets/vendor/ffmpeg.min.js b/build/assets/vendor/ffmpeg.min.js new file mode 100644 index 0000000..19151ea --- /dev/null +++ b/build/assets/vendor/ffmpeg.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.FFmpeg=t():e.FFmpeg=t()}(self,(function(){return e={497:(e,t,r)=>{var n=r(72),o=r(306).devDependencies;e.exports={corePath:"undefined"!=typeof process&&"development"===process.env.FFMPEG_ENV?n("/node_modules/@ffmpeg/core/dist/ffmpeg-core.js"):"https://unpkg.com/@ffmpeg/core@".concat(o["@ffmpeg/core"].substring(1),"/dist/ffmpeg-core.js")}},663:(e,t,r)=>{function n(e,t,r,n,o,a,i){try{var c=e[a](i),s=c.value}catch(e){return void r(e)}c.done?t(s):Promise.resolve(s).then(n,o)}var o=r(72),a=function(e){return new Promise((function(t,r){var n=new FileReader;n.onload=function(){t(n.result)},n.onerror=function(e){var t=e.target.error.code;r(Error("File could not be read! Code=".concat(t)))},n.readAsArrayBuffer(e)}))};e.exports=function(){var e,t=(e=regeneratorRuntime.mark((function e(t){var r,n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=t,void 0!==t){e.next=3;break}return e.abrupt("return",new Uint8Array);case 3:if("string"!=typeof t){e.next=16;break}if(!/data:_data\/([a-zA-Z]*);base64,([^"]*)/.test(t)){e.next=8;break}r=atob(t.split(",")[1]).split("").map((function(e){return e.charCodeAt(0)})),e.next=14;break;case 8:return e.next=10,fetch(o(t));case 10:return n=e.sent,e.next=13,n.arrayBuffer();case 13:r=e.sent;case 14:e.next=20;break;case 16:if(!(t instanceof File||t instanceof Blob)){e.next=20;break}return e.next=19,a(t);case 19:r=e.sent;case 20:return e.abrupt("return",new Uint8Array(r));case 21:case"end":return e.stop()}}),e)})),function(){var t=this,r=arguments;return new Promise((function(o,a){var i=e.apply(t,r);function c(e){n(i,o,a,c,s,"next",e)}function s(e){n(i,o,a,c,s,"throw",e)}c(void 0)}))});return function(e){return t.apply(this,arguments)}}()},452:(e,t,r)=>{function n(e,t,r,n,o,a,i){try{var c=e[a](i),s=c.value}catch(e){return void r(e)}c.done?t(s):Promise.resolve(s).then(n,o)}function o(e){return function(){var t=this,r=arguments;return new Promise((function(o,a){var i=e.apply(t,r);function c(e){n(i,o,a,c,s,"next",e)}function s(e){n(i,o,a,c,s,"throw",e)}c(void 0)}))}}var a=r(72),i=r(185).log,c=function(){var e=o(regeneratorRuntime.mark((function e(t,r){var n,o,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i("info","fetch ".concat(t)),e.next=3,fetch(t);case 3:return e.next=5,e.sent.arrayBuffer();case 5:return n=e.sent,i("info","".concat(t," file size = ").concat(n.byteLength," bytes")),o=new Blob([n],{type:r}),a=URL.createObjectURL(o),i("info","".concat(t," blob URL = ").concat(a)),e.abrupt("return",a);case 11:case"end":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}();e.exports=function(){var e=o(regeneratorRuntime.mark((function e(t){var r,n,o,s,u;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("string"==typeof(r=t.corePath)){e.next=3;break}throw Error("corePath should be a string!");case 3:return n=a(r),e.next=6,c(n,"application/javascript");case 6:return o=e.sent,e.next=9,c(n.replace("ffmpeg-core.js","ffmpeg-core.wasm"),"application/wasm");case 9:return s=e.sent,e.next=12,c(n.replace("ffmpeg-core.js","ffmpeg-core.worker.js"),"application/javascript");case 12:if(u=e.sent,"undefined"!=typeof createFFmpegCore){e.next=15;break}return e.abrupt("return",new Promise((function(e){var t=document.createElement("script");t.src=o,t.type="text/javascript",t.addEventListener("load",(function r(){t.removeEventListener("load",r),i("info","ffmpeg-core.js script loaded"),e({createFFmpegCore,corePath:o,wasmPath:s,workerPath:u})})),document.getElementsByTagName("head")[0].appendChild(t)})));case 15:return i("info","ffmpeg-core.js script is loaded already"),e.abrupt("return",Promise.resolve({createFFmpegCore,corePath:o,wasmPath:s,workerPath:u}));case 17:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()},698:(e,t,r)=>{var n=r(497),o=r(452),a=r(663);e.exports={defaultOptions:n,getCreateFFmpegCore:o,fetchFile:a}},500:e=>{e.exports={defaultArgs:["./ffmpeg","-nostdin","-y"],baseOptions:{log:!1,logger:function(){},progress:function(){},corePath:""}}},906:(e,t,r)=>{function n(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]?arguments[0]:{},t=s(s(s({},p),w),e),r=t.log,o=t.logger,a=t.progress,c=function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,["log","logger","progress"]),u=null,f=null,h=null,b=!1,F=a,O=function(e){var t=e.type,r=e.message;d(t,r),y(r,F),function(e){"FFMPEG_END"===e&&null!==h&&(h(),h=null,b=!1)}(r)},P=function(){var e=i(regeneratorRuntime.mark((function e(){var t,r,n,o,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(d("info","load ffmpeg-core"),null!==u){e.next=17;break}return d("info","loading ffmpeg-core"),e.next=5,x(c);case 5:return t=e.sent,r=t.createFFmpegCore,n=t.corePath,o=t.workerPath,a=t.wasmPath,e.next=12,r({mainScriptUrlOrBlob:n,printErr:function(e){return O({type:"fferr",message:e})},print:function(e){return O({type:"ffout",message:e})},locateFile:function(e,t){if("undefined"!=typeof window){if(void 0!==a&&e.endsWith("ffmpeg-core.wasm"))return a;if(void 0!==o&&e.endsWith("ffmpeg-core.worker.js"))return o}return t+e}});case 12:u=e.sent,f=u.cwrap("proxy_main","number",["number","number"]),d("info","ffmpeg-core loaded"),e.next=18;break;case 17:throw Error("ffmpeg.wasm was loaded, you should not load it again, use ffmpeg.isLoaded() to check next time.");case 18:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();return m(r),g(o),d("info","use ffmpeg.wasm v".concat(j)),{setProgress:function(e){F=e},setLogger:function(e){g(e)},setLogging:m,load:P,isLoaded:function(){return null!==u},run:function(){for(var e=arguments.length,t=new Array(e),r=0;r1?t-1:0),n=1;n")})).join(" "))),null===u)throw E;var o=null;try{var a;o=(a=u.FS)[e].apply(a,r)}catch(t){throw"readdir"===e?Error("ffmpeg.FS('readdir', '".concat(r[0],"') error. Check if the path exists, ex: ffmpeg.FS('readdir', '/')")):"readFile"===e?Error("ffmpeg.FS('readFile', '".concat(r[0],"') error. Check if the path exists")):Error("Oops, something went wrong in FS operation.")}return o}}}},352:(e,t,r)=>{r(666);var n=r(906),o=r(698).fetchFile;e.exports={createFFmpeg:n,fetchFile:o}},185:e=>{var t=!1,r=function(){};e.exports={logging:t,setLogging:function(e){t=e},setCustomLogger:function(e){r=e},log:function(e,n){r({type:e,message:n}),t&&console.log("[".concat(e,"] ").concat(n))}}},319:e=>{e.exports=function(e,t){var r=e._malloc(t.length*Uint32Array.BYTES_PER_ELEMENT);return t.forEach((function(t,n){var o=e._malloc(t.length+1);e.writeAsciiToMemory(t,o),e.setValue(r+Uint32Array.BYTES_PER_ELEMENT*n,o,"i32")})),[t.length,r]}},583:e=>{function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);ra)&&(r=a)}else if(e.startsWith("frame")){var i=e.split("time=")[1].split(" ")[0];t({ratio:n(i)/r})}else e.startsWith("video:")&&(t({ratio:1}),r=0)}},666:e=>{var t=function(e){"use strict";var t,r=Object.prototype,n=r.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",i=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function s(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,r){return e[t]=r}}function u(e,t,r,n){var o=t&&t.prototype instanceof d?t:d,a=Object.create(o.prototype),i=new k(n||[]);return a._invoke=function(e,t,r){var n=l;return function(o,a){if(n===h)throw new Error("Generator is already running");if(n===m){if("throw"===o)throw a;return A()}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var c=O(i,r);if(c){if(c===g)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===l)throw n=m,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=h;var s=f(e,t,r);if("normal"===s.type){if(n=r.done?m:p,s.arg===g)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(n=m,r.method="throw",r.arg=s.arg)}}}(e,r,i),a}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var l="suspendedStart",p="suspendedYield",h="executing",m="completed",g={};function d(){}function y(){}function v(){}var b={};b[a]=function(){return this};var w=Object.getPrototypeOf,x=w&&w(w(S([])));x&&x!==r&&n.call(x,a)&&(b=x);var j=v.prototype=d.prototype=Object.create(b);function E(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function F(e,t){function r(o,a,i,c){var s=f(e[o],e,a);if("throw"!==s.type){var u=s.arg,l=u.value;return l&&"object"==typeof l&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,i,c)}),(function(e){r("throw",e,i,c)})):t.resolve(l).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,c)}))}c(s.arg)}var o;this._invoke=function(e,n){function a(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(a,a):a()}}function O(e,r){var n=e.iterator[r.method];if(n===t){if(r.delegate=null,"throw"===r.method){if(e.iterator.return&&(r.method="return",r.arg=t,O(e,r),"throw"===r.method))return g;r.method="throw",r.arg=new TypeError("The iterator does not provide a 'throw' method")}return g}var o=f(n,e.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,g;var a=o.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,g):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,g)}function P(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function L(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(P,this),this.reset(!0)}function S(e){if(e){var r=e[a];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function r(){for(;++o=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),L(r),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;L(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:S(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),g}},e}(e.exports);try{regeneratorRuntime=t}catch(e){Function("r","regeneratorRuntime = r")(t)}},72:function(e,t,r){var n,o;void 0===(o="function"==typeof(n=function(){return function(){var e=arguments.length;if(0===e)throw new Error("resolveUrl requires at least one argument; got none.");var t=document.createElement("base");if(t.href=arguments[0],1===e)return t.href;var r=document.getElementsByTagName("head")[0];r.insertBefore(t,r.firstChild);for(var n,o=document.createElement("a"),a=1;a{"use strict";e.exports=JSON.parse('{"name":"@ffmpeg/ffmpeg","version":"0.9.6","description":"FFmpeg WebAssembly version","main":"src/index.js","types":"src/index.d.ts","directories":{"example":"examples"},"scripts":{"start":"node scripts/server.js","build":"rimraf dist && webpack --config scripts/webpack.config.prod.js","prepublishOnly":"npm run build","lint":"eslint src","wait":"rimraf dist && wait-on http://localhost:3000/dist/ffmpeg.dev.js","test":"npm-run-all -p -r start test:all","test:all":"npm-run-all wait test:browser:ffmpeg test:node:all","test:node":"node --experimental-wasm-threads --experimental-wasm-bulk-memory node_modules/.bin/_mocha --exit --bail --require ./scripts/test-helper.js","test:node:all":"npm run test:node -- ./tests/*.test.js","test:browser":"mocha-headless-chrome -a allow-file-access-from-files -a incognito -a no-sandbox -a disable-setuid-sandbox -a disable-logging -t 300000","test:browser:ffmpeg":"npm run test:browser -- -f ./tests/ffmpeg.test.html"},"browser":{"./src/node/index.js":"./src/browser/index.js"},"repository":{"type":"git","url":"git+https://github.com/ffmpegwasm/ffmpeg.wasm.git"},"keywords":["ffmpeg","WebAssembly","video"],"author":"Jerome Wu ","license":"MIT","bugs":{"url":"https://github.com/ffmpegwasm/ffmpeg.wasm/issues"},"engines":{"node":">=12.16.1"},"homepage":"https://github.com/ffmpegwasm/ffmpeg.wasm#readme","dependencies":{"is-url":"^1.2.4","node-fetch":"^2.6.1","regenerator-runtime":"^0.13.7","resolve-url":"^0.2.1"},"devDependencies":{"@babel/core":"^7.12.3","@babel/preset-env":"^7.12.1","@ffmpeg/core":"^0.8.5","@types/emscripten":"^1.39.4","babel-loader":"^8.1.0","chai":"^4.2.0","cors":"^2.8.5","eslint":"^7.12.1","eslint-config-airbnb-base":"^14.1.0","eslint-plugin-import":"^2.22.1","express":"^4.17.1","mocha":"^8.2.1","mocha-headless-chrome":"^2.0.3","npm-run-all":"^4.1.5","wait-on":"^5.2.0","webpack":"^5.3.2","webpack-cli":"^4.1.0","webpack-dev-middleware":"^4.0.0"}}')}},t={},function r(n){if(t[n])return t[n].exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,r),o.exports}(352);var e,t})); \ No newline at end of file diff --git a/build/assets/vendor/ffmpeg.min.js.map b/build/assets/vendor/ffmpeg.min.js.map new file mode 100644 index 0000000..587eb86 --- /dev/null +++ b/build/assets/vendor/ffmpeg.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://FFmpeg/webpack/universalModuleDefinition","webpack://FFmpeg/./src/browser/defaultOptions.js","webpack://FFmpeg/./src/browser/fetchFile.js","webpack://FFmpeg/./src/browser/getCreateFFmpegCore.js","webpack://FFmpeg/./src/browser/index.js","webpack://FFmpeg/./src/config.js","webpack://FFmpeg/./src/createFFmpeg.js","webpack://FFmpeg/./src/index.js","webpack://FFmpeg/./src/utils/log.js","webpack://FFmpeg/./src/utils/parseArgs.js","webpack://FFmpeg/./src/utils/parseProgress.js","webpack://FFmpeg/./node_modules/regenerator-runtime/runtime.js","webpack://FFmpeg/./node_modules/resolve-url/resolve-url.js","webpack://FFmpeg/webpack/bootstrap","webpack://FFmpeg/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","resolveURL","require","devDependencies","corePath","process","env","FFMPEG_ENV","substring","readFromBlobOrFile","blob","Promise","resolve","reject","fileReader","FileReader","onload","result","onerror","code","target","error","Error","readAsArrayBuffer","_data","data","Uint8Array","test","atob","split","map","c","charCodeAt","fetch","res","arrayBuffer","File","Blob","log","toBlobURL","url","mimeType","buf","byteLength","type","blobURL","URL","createObjectURL","_corePath","coreRemotePath","replace","wasmPath","workerPath","createFFmpegCore","script","document","createElement","src","addEventListener","eventHandler","removeEventListener","getElementsByTagName","appendChild","defaultOptions","getCreateFFmpegCore","fetchFile","defaultArgs","baseOptions","logger","progress","setLogging","setCustomLogger","parseProgress","parseArgs","version","NO_LOAD","_options","logging","optProgress","options","Core","ffmpeg","runResolve","running","detectCompletion","message","parseMessage","load","mainScriptUrlOrBlob","printErr","print","locateFile","path","prefix","window","endsWith","cwrap","isLoaded","run","_args","join","args","filter","s","length","FS","method","arg","ret","e","setProgress","_progress","setLogger","_logger","createFFmpeg","customLogger","_logging","console","argsPtr","_malloc","Uint32Array","BYTES_PER_ELEMENT","forEach","idx","writeAsciiToMemory","setValue","duration","ts2sec","ts","h","m","parseFloat","startsWith","d","ratio","runtime","undefined","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","obj","key","value","defineProperty","enumerable","configurable","writable","err","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","state","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","done","GenStateSuspendedYield","makeInvokeMethod","fn","call","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","then","unwrapped","previousPromise","callInvokeWithMethodAndArg","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","i","constructor","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","async","iter","toString","keys","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","numUrls","arguments","base","href","head","insertBefore","firstChild","resolved","a","index","removeChild","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAgB,OAAID,IAEpBD,EAAa,OAAIC,IARnB,CASGK,MAAM,WACT,O,iBCVA,IAAMC,EAAaC,EAAQ,IACnBC,EAAoBD,EAAQ,KAA5BC,gBAKRN,EAAOD,QAAU,CACfQ,SAA8B,oBAAZC,SAAsD,gBAA3BA,QAAQC,IAAIC,WACrDN,EAAW,kDADL,yCAE4BE,EAAgB,gBAAgBK,UAAU,GAFtE,0B,uICPZ,IAAMP,EAAaC,EAAQ,IAErBO,EAAqB,SAACC,GAAD,OACzB,IAAIC,SAAQ,SAACC,EAASC,GACpB,IAAMC,EAAa,IAAIC,WACvBD,EAAWE,OAAS,WAClBJ,EAAQE,EAAWG,SAErBH,EAAWI,QAAU,YAAqC,IAAfC,EAAe,EAAlCC,OAAUC,MAASF,KACzCN,EAAOS,MAAM,gCAAD,OAAiCH,MAE/CL,EAAWS,kBAAkBb,OAIjCb,EAAOD,QAAP,e,EAAA,G,EAAA,yBAAiB,WAAO4B,GAAP,2FACXC,EAAOD,OACU,IAAVA,EAFI,yCAGN,IAAIE,YAHE,UAMM,iBAAVF,EANI,qBAQT,yCAAyCG,KAAKH,GARrC,gBASXC,EAAOG,KAAKJ,EAAMK,MAAM,KAAK,IAC1BA,MAAM,IACNC,KAAI,SAACC,GAAD,OAAOA,EAAEC,WAAW,MAXhB,wCAcOC,MAAMhC,EAAWuB,IAdxB,eAcLU,EAdK,iBAeEA,EAAIC,cAfN,QAeXV,EAfW,4CAkBJD,aAAiBY,MAAQZ,aAAiBa,MAlBtC,kCAmBA5B,EAAmBe,GAnBnB,QAmBbC,EAnBa,wCAsBR,IAAIC,WAAWD,IAtBP,2C,+KAAjB,uD,0UCdA,IAAMxB,EAAaC,EAAQ,IACnBoC,EAAQpC,EAAQ,KAAhBoC,IAMFC,EAAS,4CAAG,WAAOC,EAAKC,GAAZ,iGAChBH,EAAI,OAAD,gBAAkBE,IADL,SAESP,MAAMO,GAFf,8BAEqBL,cAFrB,cAEVO,EAFU,OAGhBJ,EAAI,OAAD,UAAYE,EAAZ,wBAA+BE,EAAIC,WAAnC,WACGjC,EAAO,IAAI2B,KAAK,CAACK,GAAM,CAAEE,KAAMH,IAC/BI,EAAUC,IAAIC,gBAAgBrC,GACpC4B,EAAI,OAAD,UAAYE,EAAZ,uBAA8BK,IANjB,kBAOTA,GAPS,4CAAH,wDAUfhD,EAAOD,QAAP,4CAAiB,+GACU,iBADSoD,EAAnB,EAAS5C,UAAT,sBAEPkB,MAAM,gCAFC,cAIT2B,EAAiBhD,EAAW+C,GAJnB,SAKQT,EACrBU,EACA,0BAPa,cAKT7C,EALS,gBASQmC,EACrBU,EAAeC,QAAQ,iBAAkB,oBACzC,oBAXa,cASTC,EATS,iBAaUZ,EACvBU,EAAeC,QAAQ,iBAAkB,yBACzC,0BAfa,WAaTE,EAbS,OAiBiB,oBAArBC,iBAjBI,0CAkBN,IAAI1C,SAAQ,SAACC,GAClB,IAAM0C,EAASC,SAASC,cAAc,UAWtCF,EAAOG,IAAMrD,EACbkD,EAAOV,KAAO,kBACdU,EAAOI,iBAAiB,QAZH,SAAfC,IACJL,EAAOM,oBAAoB,OAAQD,GACnCrB,EAAI,OAAQ,gCACZ1B,EAAQ,CACNyC,iBACAjD,WACA+C,WACAC,kBAMJG,SAASM,qBAAqB,QAAQ,GAAGC,YAAYR,OAjC1C,eAoCfhB,EAAI,OAAQ,2CApCG,kBAqCR3B,QAAQC,QAAQ,CACrByC,iBACAjD,WACA+C,WACAC,gBAzCa,4CAAjB,uD,cClBA,IAAMW,EAAiB7D,EAAQ,KACzB8D,EAAsB9D,EAAQ,KAC9B+D,EAAY/D,EAAQ,KAE1BL,EAAOD,QAAU,CACfmE,iBACAC,sBACAC,c,QCPFpE,EAAOD,QAAU,CACfsE,YAAa,CAEX,WAEA,WAEA,MAEFC,YAAa,CAEX7B,KAAK,EAiBL8B,OAAQ,aAaRC,SAAU,aAMVjE,SAAU,M,wlEC/CuBF,EAAQ,KAArCgE,E,EAAAA,YAAaC,E,EAAAA,Y,EACwBjE,EAAQ,KAA7CoE,E,EAAAA,WAAYC,E,EAAAA,gBAAiBjC,E,EAAAA,IAC/BkC,EAAgBtE,EAAQ,KACxBuE,EAAYvE,EAAQ,K,EACsBA,EAAQ,KAAhD6D,E,EAAAA,eAAgBC,E,EAAAA,oBAChBU,EAAYxE,EAAQ,KAApBwE,QAEFC,EAAUrD,MAAM,kEAEtBzB,EAAOD,QAAU,WAAmB,IAAlBgF,EAAkB,uDAAP,GAAO,WAO7BT,GACAJ,GACAa,GAPEC,EAF2B,EAEhCvC,IACA8B,EAHgC,EAGhCA,OACUU,EAJsB,EAIhCT,SACGU,EAL6B,iCAW9BC,EAAO,KACPC,EAAS,KACTC,EAAa,KACbC,GAAU,EACVd,EAAWS,EACTM,EAAmB,SAACC,GACR,eAAZA,GAA2C,OAAfH,IAC9BA,IACAA,EAAa,KACbC,GAAU,IAGRG,EAAe,SAAC,GAAsB,IAApB1C,EAAoB,EAApBA,KAAMyC,EAAc,EAAdA,QAC5B/C,EAAIM,EAAMyC,GACVb,EAAca,EAAShB,GACvBe,EAAiBC,IAcbE,EAAI,4CAAG,8GACXjD,EAAI,OAAQ,oBACC,OAAT0C,EAFO,wBAGT1C,EAAI,OAAQ,uBAHH,SAaC0B,EAAoBe,GAbrB,uBASP1B,EATO,EASPA,iBACAjD,EAVO,EAUPA,SACAgD,EAXO,EAWPA,WACAD,EAZO,EAYPA,SAZO,UAcIE,EAAiB,CAK5BmC,oBAAqBpF,EACrBqF,SAAU,SAACJ,GAAD,OAAaC,EAAa,CAAE1C,KAAM,QAASyC,aACrDK,MAAO,SAACL,GAAD,OAAaC,EAAa,CAAE1C,KAAM,QAASyC,aAMlDM,WAAY,SAACC,EAAMC,GACjB,GAAsB,oBAAXC,OAAwB,CACjC,QAAwB,IAAb3C,GACNyC,EAAKG,SAAS,oBACjB,OAAO5C,EAET,QAA0B,IAAfC,GACNwC,EAAKG,SAAS,yBACjB,OAAO3C,EAGX,OAAOyC,EAASD,KAtCX,QAcTZ,EAdS,OAyCTC,EAASD,EAAKgB,MAAM,aAAc,SAAU,CAAC,SAAU,WACvD1D,EAAI,OAAQ,sBA1CH,8BA4CHhB,MAAM,mGA5CH,4CAAH,qDAoDJ2E,EAAW,kBAAe,OAATjB,GAoBjBkB,EAAM,WAAc,2BAAVC,EAAU,yBAAVA,EAAU,gBAExB,GADA7D,EAAI,OAAD,8BAAgC6D,EAAMC,KAAK,OACjC,OAATpB,EACF,MAAML,EACD,GAAIQ,EACT,MAAM7D,MAAM,kDAGZ,OADA6D,GAAU,EACH,IAAIxE,SAAQ,SAACC,GAClB,IAAMyF,EAAO,YAAInC,GAAgBiC,GAAOG,QAAO,SAACC,GAAD,OAAoB,IAAbA,EAAEC,UACxDtB,EAAatE,EACbqE,EAAM,WAAN,IAAUR,EAAUO,EAAMqB,SAoB1BI,EAAK,SAACC,GAAoB,2BAATL,EAAS,iCAATA,EAAS,kBAE9B,GADA/D,EAAI,OAAD,iBAAmBoE,EAAnB,YAA6BL,EAAKvE,KAAI,SAAC6E,GAAD,MAAyB,iBAARA,EAAmBA,EAA1B,WAAoCA,EAAIH,OAAxC,0BAAsEJ,KAAK,OACjH,OAATpB,EACF,MAAML,EAEN,IAAIiC,EAAM,KACV,IAAI,MACFA,GAAM,EAAA5B,EAAKyB,IAAGC,GAAR,QAAmBL,GACzB,MAAOQ,GACP,KAAe,YAAXH,EACIpF,MAAM,yBAAD,OAA0B+E,EAAK,GAA/B,sEACS,aAAXK,EACHpF,MAAM,0BAAD,OAA2B+E,EAAK,GAAhC,uCAEL/E,MAAM,+CAGhB,OAAOsF,GAILE,EAAc,SAACC,GACnB1C,EAAW0C,GAGPC,EAAY,SAACC,GACjB1C,EAAgB0C,IAQlB,OALA3C,EAAWO,GACXN,EAAgBH,GAEhB9B,EAAI,OAAD,2BAA6BoC,IAEzB,CACLoC,cACAE,YACA1C,aACAiB,OACAU,WACAC,MACAO,Q,cCjMJvG,EAAQ,KACR,IAAMgH,EAAehH,EAAQ,KACrB+D,EAAc/D,EAAQ,KAAtB+D,UAERpE,EAAOD,QAAU,CAoBfsH,eAUAjD,c,QClCF,IAAIY,GAAU,EACVsC,EAAe,aAiBnBtH,EAAOD,QAAU,CACfiF,UACAP,WAjBiB,SAAC8C,GAClBvC,EAAUuC,GAiBV7C,gBAdsB,SAACH,GACvB+C,EAAe/C,GAcf9B,IAXU,SAACM,EAAMyC,GACjB8B,EAAa,CAAEvE,OAAMyC,YACjBR,GACFwC,QAAQ/E,IAAR,WAAgBM,EAAhB,aAAyByC,O,QCd7BxF,EAAOD,QAAU,SAACoF,EAAMqB,GACtB,IAAMiB,EAAUtC,EAAKuC,QAAQlB,EAAKG,OAASgB,YAAYC,mBAMvD,OALApB,EAAKqB,SAAQ,SAACnB,EAAGoB,GACf,IAAMjF,EAAMsC,EAAKuC,QAAQhB,EAAEC,OAAS,GACpCxB,EAAK4C,mBAAmBrB,EAAG7D,GAC3BsC,EAAK6C,SAASP,EAAWE,YAAYC,kBAAoBE,EAAMjF,EAAK,UAE/D,CAAC2D,EAAKG,OAAQc,K,kHCPvB,IAAIQ,EAAW,EAETC,EAAS,SAACC,GAAO,I,IAAA,G,EACHA,EAAGnG,MAAM,K,EADN,E,kzBACdoG,EADc,KACXC,EADW,KACR3B,EADQ,KAErB,OAAwB,GAAhB4B,WAAWF,GAAU,GAAuB,GAAhBE,WAAWD,GAAWC,WAAW5B,IAGvE1G,EAAOD,QAAU,SAACyF,EAAShB,GACzB,GAAuB,iBAAZgB,EACT,GAAIA,EAAQ+C,WAAW,cAAe,CACpC,IAAMJ,EAAK3C,EAAQxD,MAAM,MAAM,GAAGA,MAAM,MAAM,GACxCwG,EAAIN,EAAOC,IACA,IAAbF,GAAkBA,EAAWO,KAC/BP,EAAWO,QAER,GAAIhD,EAAQ+C,WAAW,SAAU,CACtC,IAAMJ,EAAK3C,EAAQxD,MAAM,SAAS,GAAGA,MAAM,KAAK,GAEhDwC,EAAS,CAAEiE,MADDP,EAAOC,GACKF,SACbzC,EAAQ+C,WAAW,YAC5B/D,EAAS,CAAEiE,MAAO,IAClBR,EAAW,K,QCdjB,IAAIS,EAAW,SAAU3I,GACvB,aAEA,IAEI4I,EAFAC,EAAKC,OAAOC,UACZC,EAASH,EAAGI,eAEZC,EAA4B,mBAAXC,OAAwBA,OAAS,GAClDC,EAAiBF,EAAQG,UAAY,aACrCC,EAAsBJ,EAAQK,eAAiB,kBAC/CC,EAAoBN,EAAQO,aAAe,gBAE/C,SAASvJ,EAAOwJ,EAAKC,EAAKC,GAOxB,OANAd,OAAOe,eAAeH,EAAKC,EAAK,CAC9BC,MAAOA,EACPE,YAAY,EACZC,cAAc,EACdC,UAAU,IAELN,EAAIC,GAEb,IAEEzJ,EAAO,GAAI,IACX,MAAO+J,GACP/J,EAAS,SAASwJ,EAAKC,EAAKC,GAC1B,OAAOF,EAAIC,GAAOC,GAItB,SAASM,EAAKC,EAASC,EAAShK,EAAMiK,GAEpC,IAAIC,EAAiBF,GAAWA,EAAQrB,qBAAqBwB,EAAYH,EAAUG,EAC/EC,EAAY1B,OAAO2B,OAAOH,EAAevB,WACzC2B,EAAU,IAAIC,EAAQN,GAAe,IAMzC,OAFAG,EAAUI,QAsMZ,SAA0BT,EAAS/J,EAAMsK,GACvC,IAAIG,EAAQC,EAEZ,OAAO,SAAgBhE,EAAQC,GAC7B,GAAI8D,IAAUE,EACZ,MAAM,IAAIrJ,MAAM,gCAGlB,GAAImJ,IAAUG,EAAmB,CAC/B,GAAe,UAAXlE,EACF,MAAMC,EAKR,OAAOkE,IAMT,IAHAP,EAAQ5D,OAASA,EACjB4D,EAAQ3D,IAAMA,IAED,CACX,IAAImE,EAAWR,EAAQQ,SACvB,GAAIA,EAAU,CACZ,IAAIC,EAAiBC,EAAoBF,EAAUR,GACnD,GAAIS,EAAgB,CAClB,GAAIA,IAAmBE,EAAkB,SACzC,OAAOF,GAIX,GAAuB,SAAnBT,EAAQ5D,OAGV4D,EAAQY,KAAOZ,EAAQa,MAAQb,EAAQ3D,SAElC,GAAuB,UAAnB2D,EAAQ5D,OAAoB,CACrC,GAAI+D,IAAUC,EAEZ,MADAD,EAAQG,EACFN,EAAQ3D,IAGhB2D,EAAQc,kBAAkBd,EAAQ3D,SAEN,WAAnB2D,EAAQ5D,QACjB4D,EAAQe,OAAO,SAAUf,EAAQ3D,KAGnC8D,EAAQE,EAER,IAAIW,EAASC,EAASxB,EAAS/J,EAAMsK,GACrC,GAAoB,WAAhBgB,EAAO1I,KAAmB,CAO5B,GAJA6H,EAAQH,EAAQkB,KACZZ,EACAa,EAEAH,EAAO3E,MAAQsE,EACjB,SAGF,MAAO,CACLzB,MAAO8B,EAAO3E,IACd6E,KAAMlB,EAAQkB,MAGS,UAAhBF,EAAO1I,OAChB6H,EAAQG,EAGRN,EAAQ5D,OAAS,QACjB4D,EAAQ3D,IAAM2E,EAAO3E,OA9QP+E,CAAiB3B,EAAS/J,EAAMsK,GAE7CF,EAcT,SAASmB,EAASI,EAAIrC,EAAK3C,GACzB,IACE,MAAO,CAAE/D,KAAM,SAAU+D,IAAKgF,EAAGC,KAAKtC,EAAK3C,IAC3C,MAAOkD,GACP,MAAO,CAAEjH,KAAM,QAAS+D,IAAKkD,IAhBjCjK,EAAQkK,KAAOA,EAoBf,IAAIY,EAAyB,iBACzBe,EAAyB,iBACzBd,EAAoB,YACpBC,EAAoB,YAIpBK,EAAmB,GAMvB,SAASd,KACT,SAAS0B,KACT,SAASC,KAIT,IAAIC,EAAoB,GACxBA,EAAkB/C,GAAkB,WAClC,OAAOgD,MAGT,IAAIC,EAAWvD,OAAOwD,eAClBC,EAA0BF,GAAYA,EAASA,EAASG,EAAO,MAC/DD,GACAA,IAA4B1D,GAC5BG,EAAOgD,KAAKO,EAAyBnD,KAGvC+C,EAAoBI,GAGtB,IAAIE,EAAKP,EAA2BnD,UAClCwB,EAAUxB,UAAYD,OAAO2B,OAAO0B,GAWtC,SAASO,EAAsB3D,GAC7B,CAAC,OAAQ,QAAS,UAAUjB,SAAQ,SAAShB,GAC3C5G,EAAO6I,EAAWjC,GAAQ,SAASC,GACjC,OAAOqF,KAAKxB,QAAQ9D,EAAQC,SAkClC,SAAS4F,EAAcnC,EAAWoC,GAChC,SAASC,EAAO/F,EAAQC,EAAK/F,EAASC,GACpC,IAAIyK,EAASC,EAASnB,EAAU1D,GAAS0D,EAAWzD,GACpD,GAAoB,UAAhB2E,EAAO1I,KAEJ,CACL,IAAI3B,EAASqK,EAAO3E,IAChB6C,EAAQvI,EAAOuI,MACnB,OAAIA,GACiB,iBAAVA,GACPZ,EAAOgD,KAAKpC,EAAO,WACdgD,EAAY5L,QAAQ4I,EAAMkD,SAASC,MAAK,SAASnD,GACtDiD,EAAO,OAAQjD,EAAO5I,EAASC,MAC9B,SAASgJ,GACV4C,EAAO,QAAS5C,EAAKjJ,EAASC,MAI3B2L,EAAY5L,QAAQ4I,GAAOmD,MAAK,SAASC,GAI9C3L,EAAOuI,MAAQoD,EACfhM,EAAQK,MACP,SAASI,GAGV,OAAOoL,EAAO,QAASpL,EAAOT,EAASC,MAvBzCA,EAAOyK,EAAO3E,KA4BlB,IAAIkG,EAgCJb,KAAKxB,QA9BL,SAAiB9D,EAAQC,GACvB,SAASmG,IACP,OAAO,IAAIN,GAAY,SAAS5L,EAASC,GACvC4L,EAAO/F,EAAQC,EAAK/F,EAASC,MAIjC,OAAOgM,EAaLA,EAAkBA,EAAgBF,KAChCG,EAGAA,GACEA,KAkHV,SAAS9B,EAAoBF,EAAUR,GACrC,IAAI5D,EAASoE,EAAS7B,SAASqB,EAAQ5D,QACvC,GAAIA,IAAW8B,EAAW,CAKxB,GAFA8B,EAAQQ,SAAW,KAEI,UAAnBR,EAAQ5D,OAAoB,CAE9B,GAAIoE,EAAS7B,SAAiB,SAG5BqB,EAAQ5D,OAAS,SACjB4D,EAAQ3D,IAAM6B,EACdwC,EAAoBF,EAAUR,GAEP,UAAnBA,EAAQ5D,QAGV,OAAOuE,EAIXX,EAAQ5D,OAAS,QACjB4D,EAAQ3D,IAAM,IAAIoG,UAChB,kDAGJ,OAAO9B,EAGT,IAAIK,EAASC,EAAS7E,EAAQoE,EAAS7B,SAAUqB,EAAQ3D,KAEzD,GAAoB,UAAhB2E,EAAO1I,KAIT,OAHA0H,EAAQ5D,OAAS,QACjB4D,EAAQ3D,IAAM2E,EAAO3E,IACrB2D,EAAQQ,SAAW,KACZG,EAGT,IAAI+B,EAAO1B,EAAO3E,IAElB,OAAMqG,EAOFA,EAAKxB,MAGPlB,EAAQQ,EAASmC,YAAcD,EAAKxD,MAGpCc,EAAQ4C,KAAOpC,EAASqC,QAQD,WAAnB7C,EAAQ5D,SACV4D,EAAQ5D,OAAS,OACjB4D,EAAQ3D,IAAM6B,GAUlB8B,EAAQQ,SAAW,KACZG,GANE+B,GA3BP1C,EAAQ5D,OAAS,QACjB4D,EAAQ3D,IAAM,IAAIoG,UAAU,oCAC5BzC,EAAQQ,SAAW,KACZG,GAoDX,SAASmC,EAAaC,GACpB,IAAIC,EAAQ,CAAEC,OAAQF,EAAK,IAEvB,KAAKA,IACPC,EAAME,SAAWH,EAAK,IAGpB,KAAKA,IACPC,EAAMG,WAAaJ,EAAK,GACxBC,EAAMI,SAAWL,EAAK,IAGxBrB,KAAK2B,WAAWC,KAAKN,GAGvB,SAASO,EAAcP,GACrB,IAAIhC,EAASgC,EAAMQ,YAAc,GACjCxC,EAAO1I,KAAO,gBACP0I,EAAO3E,IACd2G,EAAMQ,WAAaxC,EAGrB,SAASf,EAAQN,GAIf+B,KAAK2B,WAAa,CAAC,CAAEJ,OAAQ,SAC7BtD,EAAYvC,QAAQ0F,EAAcpB,MAClCA,KAAK+B,OAAM,GA8Bb,SAAS3B,EAAO4B,GACd,GAAIA,EAAU,CACZ,IAAIC,EAAiBD,EAAShF,GAC9B,GAAIiF,EACF,OAAOA,EAAerC,KAAKoC,GAG7B,GAA6B,mBAAlBA,EAASd,KAClB,OAAOc,EAGT,IAAKE,MAAMF,EAASxH,QAAS,CAC3B,IAAI2H,GAAK,EAAGjB,EAAO,SAASA,IAC1B,OAASiB,EAAIH,EAASxH,QACpB,GAAIoC,EAAOgD,KAAKoC,EAAUG,GAGxB,OAFAjB,EAAK1D,MAAQwE,EAASG,GACtBjB,EAAK1B,MAAO,EACL0B,EAOX,OAHAA,EAAK1D,MAAQhB,EACb0E,EAAK1B,MAAO,EAEL0B,GAGT,OAAOA,EAAKA,KAAOA,GAKvB,MAAO,CAAEA,KAAMrC,GAIjB,SAASA,IACP,MAAO,CAAErB,MAAOhB,EAAWgD,MAAM,GA+MnC,OA5mBAK,EAAkBlD,UAAY0D,EAAG+B,YAActC,EAC/CA,EAA2BsC,YAAcvC,EACzCA,EAAkBwC,YAAcvO,EAC9BgM,EACA1C,EACA,qBAaFxJ,EAAQ0O,oBAAsB,SAASC,GACrC,IAAIC,EAAyB,mBAAXD,GAAyBA,EAAOH,YAClD,QAAOI,IACHA,IAAS3C,GAG2B,uBAAnC2C,EAAKH,aAAeG,EAAKC,QAIhC7O,EAAQ8O,KAAO,SAASH,GAQtB,OAPI7F,OAAOiG,eACTjG,OAAOiG,eAAeJ,EAAQzC,IAE9ByC,EAAOK,UAAY9C,EACnBhM,EAAOyO,EAAQnF,EAAmB,sBAEpCmF,EAAO5F,UAAYD,OAAO2B,OAAOgC,GAC1BkC,GAOT3O,EAAQiP,MAAQ,SAASlI,GACvB,MAAO,CAAE+F,QAAS/F,IAsEpB2F,EAAsBC,EAAc5D,WACpC4D,EAAc5D,UAAUO,GAAuB,WAC7C,OAAO8C,MAETpM,EAAQ2M,cAAgBA,EAKxB3M,EAAQkP,MAAQ,SAAS/E,EAASC,EAAShK,EAAMiK,EAAauC,QACxC,IAAhBA,IAAwBA,EAAc7L,SAE1C,IAAIoO,EAAO,IAAIxC,EACbzC,EAAKC,EAASC,EAAShK,EAAMiK,GAC7BuC,GAGF,OAAO5M,EAAQ0O,oBAAoBtE,GAC/B+E,EACAA,EAAK7B,OAAOP,MAAK,SAAS1L,GACxB,OAAOA,EAAOuK,KAAOvK,EAAOuI,MAAQuF,EAAK7B,WAuKjDZ,EAAsBD,GAEtBvM,EAAOuM,EAAIjD,EAAmB,aAO9BiD,EAAGrD,GAAkB,WACnB,OAAOgD,MAGTK,EAAG2C,SAAW,WACZ,MAAO,sBAkCTpP,EAAQqP,KAAO,SAASC,GACtB,IAAID,EAAO,GACX,IAAK,IAAI1F,KAAO2F,EACdD,EAAKrB,KAAKrE,GAMZ,OAJA0F,EAAKE,UAIE,SAASjC,IACd,KAAO+B,EAAKzI,QAAQ,CAClB,IAAI+C,EAAM0F,EAAKG,MACf,GAAI7F,KAAO2F,EAGT,OAFAhC,EAAK1D,MAAQD,EACb2D,EAAK1B,MAAO,EACL0B,EAQX,OADAA,EAAK1B,MAAO,EACL0B,IAsCXtN,EAAQwM,OAASA,EAMjB7B,EAAQ5B,UAAY,CAClByF,YAAa7D,EAEbwD,MAAO,SAASsB,GAcd,GAbArD,KAAKsD,KAAO,EACZtD,KAAKkB,KAAO,EAGZlB,KAAKd,KAAOc,KAAKb,MAAQ3C,EACzBwD,KAAKR,MAAO,EACZQ,KAAKlB,SAAW,KAEhBkB,KAAKtF,OAAS,OACdsF,KAAKrF,IAAM6B,EAEXwD,KAAK2B,WAAWjG,QAAQmG,IAEnBwB,EACH,IAAK,IAAIZ,KAAQzC,KAEQ,MAAnByC,EAAKc,OAAO,IACZ3G,EAAOgD,KAAKI,KAAMyC,KACjBP,OAAOO,EAAKe,MAAM,MACrBxD,KAAKyC,GAAQjG,IAMrBiH,KAAM,WACJzD,KAAKR,MAAO,EAEZ,IACIkE,EADY1D,KAAK2B,WAAW,GACLG,WAC3B,GAAwB,UAApB4B,EAAW9M,KACb,MAAM8M,EAAW/I,IAGnB,OAAOqF,KAAK2D,MAGdvE,kBAAmB,SAASwE,GAC1B,GAAI5D,KAAKR,KACP,MAAMoE,EAGR,IAAItF,EAAU0B,KACd,SAAS6D,EAAOC,EAAKC,GAYnB,OAXAzE,EAAO1I,KAAO,QACd0I,EAAO3E,IAAMiJ,EACbtF,EAAQ4C,KAAO4C,EAEXC,IAGFzF,EAAQ5D,OAAS,OACjB4D,EAAQ3D,IAAM6B,KAGNuH,EAGZ,IAAK,IAAI5B,EAAInC,KAAK2B,WAAWnH,OAAS,EAAG2H,GAAK,IAAKA,EAAG,CACpD,IAAIb,EAAQtB,KAAK2B,WAAWQ,GACxB7C,EAASgC,EAAMQ,WAEnB,GAAqB,SAAjBR,EAAMC,OAIR,OAAOsC,EAAO,OAGhB,GAAIvC,EAAMC,QAAUvB,KAAKsD,KAAM,CAC7B,IAAIU,EAAWpH,EAAOgD,KAAK0B,EAAO,YAC9B2C,EAAarH,EAAOgD,KAAK0B,EAAO,cAEpC,GAAI0C,GAAYC,EAAY,CAC1B,GAAIjE,KAAKsD,KAAOhC,EAAME,SACpB,OAAOqC,EAAOvC,EAAME,UAAU,GACzB,GAAIxB,KAAKsD,KAAOhC,EAAMG,WAC3B,OAAOoC,EAAOvC,EAAMG,iBAGjB,GAAIuC,GACT,GAAIhE,KAAKsD,KAAOhC,EAAME,SACpB,OAAOqC,EAAOvC,EAAME,UAAU,OAG3B,KAAIyC,EAMT,MAAM,IAAI3O,MAAM,0CALhB,GAAI0K,KAAKsD,KAAOhC,EAAMG,WACpB,OAAOoC,EAAOvC,EAAMG,gBAU9BpC,OAAQ,SAASzI,EAAM+D,GACrB,IAAK,IAAIwH,EAAInC,KAAK2B,WAAWnH,OAAS,EAAG2H,GAAK,IAAKA,EAAG,CACpD,IAAIb,EAAQtB,KAAK2B,WAAWQ,GAC5B,GAAIb,EAAMC,QAAUvB,KAAKsD,MACrB1G,EAAOgD,KAAK0B,EAAO,eACnBtB,KAAKsD,KAAOhC,EAAMG,WAAY,CAChC,IAAIyC,EAAe5C,EACnB,OAIA4C,IACU,UAATtN,GACS,aAATA,IACDsN,EAAa3C,QAAU5G,GACvBA,GAAOuJ,EAAazC,aAGtByC,EAAe,MAGjB,IAAI5E,EAAS4E,EAAeA,EAAapC,WAAa,GAItD,OAHAxC,EAAO1I,KAAOA,EACd0I,EAAO3E,IAAMA,EAETuJ,GACFlE,KAAKtF,OAAS,OACdsF,KAAKkB,KAAOgD,EAAazC,WAClBxC,GAGFe,KAAKmE,SAAS7E,IAGvB6E,SAAU,SAAS7E,EAAQoC,GACzB,GAAoB,UAAhBpC,EAAO1I,KACT,MAAM0I,EAAO3E,IAcf,MAXoB,UAAhB2E,EAAO1I,MACS,aAAhB0I,EAAO1I,KACToJ,KAAKkB,KAAO5B,EAAO3E,IACM,WAAhB2E,EAAO1I,MAChBoJ,KAAK2D,KAAO3D,KAAKrF,IAAM2E,EAAO3E,IAC9BqF,KAAKtF,OAAS,SACdsF,KAAKkB,KAAO,OACa,WAAhB5B,EAAO1I,MAAqB8K,IACrC1B,KAAKkB,KAAOQ,GAGPzC,GAGTmF,OAAQ,SAAS3C,GACf,IAAK,IAAIU,EAAInC,KAAK2B,WAAWnH,OAAS,EAAG2H,GAAK,IAAKA,EAAG,CACpD,IAAIb,EAAQtB,KAAK2B,WAAWQ,GAC5B,GAAIb,EAAMG,aAAeA,EAGvB,OAFAzB,KAAKmE,SAAS7C,EAAMQ,WAAYR,EAAMI,UACtCG,EAAcP,GACPrC,IAKb,MAAS,SAASsC,GAChB,IAAK,IAAIY,EAAInC,KAAK2B,WAAWnH,OAAS,EAAG2H,GAAK,IAAKA,EAAG,CACpD,IAAIb,EAAQtB,KAAK2B,WAAWQ,GAC5B,GAAIb,EAAMC,SAAWA,EAAQ,CAC3B,IAAIjC,EAASgC,EAAMQ,WACnB,GAAoB,UAAhBxC,EAAO1I,KAAkB,CAC3B,IAAIyN,EAAS/E,EAAO3E,IACpBkH,EAAcP,GAEhB,OAAO+C,GAMX,MAAM,IAAI/O,MAAM,0BAGlBgP,cAAe,SAAStC,EAAUf,EAAYE,GAa5C,OAZAnB,KAAKlB,SAAW,CACd7B,SAAUmD,EAAO4B,GACjBf,WAAYA,EACZE,QAASA,GAGS,SAAhBnB,KAAKtF,SAGPsF,KAAKrF,IAAM6B,GAGNyC,IAQJrL,EA7sBK,CAotBiBC,EAAOD,SAGtC,IACE2Q,mBAAqBhI,EACrB,MAAOiI,GAUPC,SAAS,IAAK,yBAAdA,CAAwClI,K,mBC1uB1C,aAKkB,0BAAd,EAMI,WAiCN,OA/BA,WACE,IAAImI,EAAUC,UAAUnK,OAExB,GAAgB,IAAZkK,EACF,MAAM,IAAIpP,MAAM,wDAGlB,IAAIsP,EAAOrN,SAASC,cAAc,QAGlC,GAFAoN,EAAKC,KAAOF,UAAU,GAEN,IAAZD,EACF,OAAOE,EAAKC,KAGd,IAAIC,EAAOvN,SAASM,qBAAqB,QAAQ,GACjDiN,EAAKC,aAAaH,EAAME,EAAKE,YAK7B,IAHA,IACIC,EADAC,EAAI3N,SAASC,cAAc,KAGtB2N,EAAQ,EAAGA,EAAQT,EAASS,IACnCD,EAAEL,KAAOF,UAAUQ,GACnBF,EAAWC,EAAEL,KACbD,EAAKC,KAAOI,EAKd,OAFAH,EAAKM,YAAYR,GAEVK,KApCO,mC,o8DCJdI,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,GAAGF,EAAyBE,GAC3B,OAAOF,EAAyBE,GAAU3R,QAG3C,IAAIC,EAASwR,EAAyBE,GAAY,CAGjD3R,QAAS,IAOV,OAHA4R,EAAoBD,GAAU3F,KAAK/L,EAAOD,QAASC,EAAQA,EAAOD,QAAS0R,GAGpEzR,EAAOD,QCjBR0R,CAAoB,K,MDFvBD","file":"ffmpeg.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FFmpeg\"] = factory();\n\telse\n\t\troot[\"FFmpeg\"] = factory();\n})(self, function() {\nreturn ","const resolveURL = require('resolve-url');\nconst { devDependencies } = require('../../package.json');\n\n/*\n * Default options for browser environment\n */\nmodule.exports = {\n corePath: (typeof process !== 'undefined' && process.env.FFMPEG_ENV === 'development')\n ? resolveURL('/node_modules/@ffmpeg/core/dist/ffmpeg-core.js')\n : `https://unpkg.com/@ffmpeg/core@${devDependencies['@ffmpeg/core'].substring(1)}/dist/ffmpeg-core.js`,\n};\n","const resolveURL = require('resolve-url');\n\nconst readFromBlobOrFile = (blob) => (\n new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n fileReader.onload = () => {\n resolve(fileReader.result);\n };\n fileReader.onerror = ({ target: { error: { code } } }) => {\n reject(Error(`File could not be read! Code=${code}`));\n };\n fileReader.readAsArrayBuffer(blob);\n })\n);\n\nmodule.exports = async (_data) => {\n let data = _data;\n if (typeof _data === 'undefined') {\n return new Uint8Array();\n }\n\n if (typeof _data === 'string') {\n /* From base64 format */\n if (/data:_data\\/([a-zA-Z]*);base64,([^\"]*)/.test(_data)) {\n data = atob(_data.split(',')[1])\n .split('')\n .map((c) => c.charCodeAt(0));\n /* From remote server/URL */\n } else {\n const res = await fetch(resolveURL(_data));\n data = await res.arrayBuffer();\n }\n /* From Blob or File */\n } else if (_data instanceof File || _data instanceof Blob) {\n data = await readFromBlobOrFile(_data);\n }\n\n return new Uint8Array(data);\n};\n","/* eslint-disable no-undef */\nconst resolveURL = require('resolve-url');\nconst { log } = require('../utils/log');\n\n/*\n * Fetch data from remote URL and convert to blob URL\n * to avoid CORS issue\n */\nconst toBlobURL = async (url, mimeType) => {\n log('info', `fetch ${url}`);\n const buf = await (await fetch(url)).arrayBuffer();\n log('info', `${url} file size = ${buf.byteLength} bytes`);\n const blob = new Blob([buf], { type: mimeType });\n const blobURL = URL.createObjectURL(blob);\n log('info', `${url} blob URL = ${blobURL}`);\n return blobURL;\n};\n\nmodule.exports = async ({ corePath: _corePath }) => {\n if (typeof _corePath !== 'string') {\n throw Error('corePath should be a string!');\n }\n const coreRemotePath = resolveURL(_corePath);\n const corePath = await toBlobURL(\n coreRemotePath,\n 'application/javascript',\n );\n const wasmPath = await toBlobURL(\n coreRemotePath.replace('ffmpeg-core.js', 'ffmpeg-core.wasm'),\n 'application/wasm',\n );\n const workerPath = await toBlobURL(\n coreRemotePath.replace('ffmpeg-core.js', 'ffmpeg-core.worker.js'),\n 'application/javascript',\n );\n if (typeof createFFmpegCore === 'undefined') {\n return new Promise((resolve) => {\n const script = document.createElement('script');\n const eventHandler = () => {\n script.removeEventListener('load', eventHandler);\n log('info', 'ffmpeg-core.js script loaded');\n resolve({\n createFFmpegCore,\n corePath,\n wasmPath,\n workerPath,\n });\n };\n script.src = corePath;\n script.type = 'text/javascript';\n script.addEventListener('load', eventHandler);\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n }\n log('info', 'ffmpeg-core.js script is loaded already');\n return Promise.resolve({\n createFFmpegCore,\n corePath,\n wasmPath,\n workerPath,\n });\n};\n","const defaultOptions = require('./defaultOptions');\nconst getCreateFFmpegCore = require('./getCreateFFmpegCore');\nconst fetchFile = require('./fetchFile');\n\nmodule.exports = {\n defaultOptions,\n getCreateFFmpegCore,\n fetchFile,\n};\n","module.exports = {\n defaultArgs: [\n /* args[0] is always the binary path */\n './ffmpeg',\n /* Disable interaction mode */\n '-nostdin',\n /* Force to override output file */\n '-y',\n ],\n baseOptions: {\n /* Flag to turn on/off log messages in console */\n log: false,\n /*\n * Custom logger to get ffmpeg.wasm output messages.\n * a sample logger looks like this:\n *\n * ```\n * logger = ({ type, message }) => {\n * console.log(type, message);\n * }\n * ```\n *\n * type can be one of following:\n *\n * info: internal workflow debug messages\n * fferr: ffmpeg native stderr output\n * ffout: ffmpeg native stdout output\n */\n logger: () => {},\n /*\n * Progress handler to get current progress of ffmpeg command.\n * a sample progress handler looks like this:\n *\n * ```\n * progress = ({ ratio }) => {\n * console.log(ratio);\n * }\n * ```\n *\n * ratio is a float number between 0 to 1.\n */\n progress: () => {},\n /*\n * Path to find/download ffmpeg.wasm-core,\n * this value should be overwriten by `defaultOptions` in\n * each environment.\n */\n corePath: '',\n },\n};\n","const { defaultArgs, baseOptions } = require('./config');\nconst { setLogging, setCustomLogger, log } = require('./utils/log');\nconst parseProgress = require('./utils/parseProgress');\nconst parseArgs = require('./utils/parseArgs');\nconst { defaultOptions, getCreateFFmpegCore } = require('./node');\nconst { version } = require('../package.json');\n\nconst NO_LOAD = Error('ffmpeg.wasm is not ready, make sure you have completed load().');\n\nmodule.exports = (_options = {}) => {\n const {\n log: logging,\n logger,\n progress: optProgress,\n ...options\n } = {\n ...baseOptions,\n ...defaultOptions,\n ..._options,\n };\n let Core = null;\n let ffmpeg = null;\n let runResolve = null;\n let running = false;\n let progress = optProgress;\n const detectCompletion = (message) => {\n if (message === 'FFMPEG_END' && runResolve !== null) {\n runResolve();\n runResolve = null;\n running = false;\n }\n };\n const parseMessage = ({ type, message }) => {\n log(type, message);\n parseProgress(message, progress);\n detectCompletion(message);\n };\n\n /*\n * Load ffmpeg.wasm-core script.\n * In browser environment, the ffmpeg.wasm-core script is fetch from\n * CDN and can be assign to a local path by assigning `corePath`.\n * In node environment, we use dynamic require and the default `corePath`\n * is `$ffmpeg/core`.\n *\n * Typically the load() func might take few seconds to minutes to complete,\n * better to do it as early as possible.\n *\n */\n const load = async () => {\n log('info', 'load ffmpeg-core');\n if (Core === null) {\n log('info', 'loading ffmpeg-core');\n /*\n * In node environment, all paths are undefined as there\n * is no need to set them.\n */\n const {\n createFFmpegCore,\n corePath,\n workerPath,\n wasmPath,\n } = await getCreateFFmpegCore(options);\n Core = await createFFmpegCore({\n /*\n * Assign mainScriptUrlOrBlob fixes chrome extension web worker issue\n * as there is no document.currentScript in the context of content_scripts\n */\n mainScriptUrlOrBlob: corePath,\n printErr: (message) => parseMessage({ type: 'fferr', message }),\n print: (message) => parseMessage({ type: 'ffout', message }),\n /*\n * locateFile overrides paths of files that is loaded by main script (ffmpeg-core.js).\n * It is critical for browser environment and we override both wasm and worker paths\n * as we are using blob URL instead of original URL to avoid cross origin issues.\n */\n locateFile: (path, prefix) => {\n if (typeof window !== 'undefined') {\n if (typeof wasmPath !== 'undefined'\n && path.endsWith('ffmpeg-core.wasm')) {\n return wasmPath;\n }\n if (typeof workerPath !== 'undefined'\n && path.endsWith('ffmpeg-core.worker.js')) {\n return workerPath;\n }\n }\n return prefix + path;\n },\n });\n ffmpeg = Core.cwrap('proxy_main', 'number', ['number', 'number']);\n log('info', 'ffmpeg-core loaded');\n } else {\n throw Error('ffmpeg.wasm was loaded, you should not load it again, use ffmpeg.isLoaded() to check next time.');\n }\n };\n\n\n /*\n * Determine whether the Core is loaded.\n */\n const isLoaded = () => Core !== null;\n\n /*\n * Run ffmpeg command.\n * This is the major function in ffmpeg.wasm, you can just imagine it\n * as ffmpeg native cli and what you need to pass is the same.\n *\n * For example, you can convert native command below:\n *\n * ```\n * $ ffmpeg -i video.avi -c:v libx264 video.mp4\n * ```\n *\n * To\n *\n * ```\n * await ffmpeg.run('-i', 'video.avi', '-c:v', 'libx264', 'video.mp4');\n * ```\n *\n */\n const run = (..._args) => {\n log('info', `run ffmpeg command: ${_args.join(' ')}`);\n if (Core === null) {\n throw NO_LOAD;\n } else if (running) {\n throw Error('ffmpeg.wasm can only run one command at a time');\n } else {\n running = true;\n return new Promise((resolve) => {\n const args = [...defaultArgs, ..._args].filter((s) => s.length !== 0);\n runResolve = resolve;\n ffmpeg(...parseArgs(Core, args));\n });\n }\n };\n\n /*\n * Run FS operations.\n * For input/output file of ffmpeg.wasm, it is required to save them to MEMFS\n * first so that ffmpeg.wasm is able to consume them. Here we rely on the FS\n * methods provided by Emscripten.\n *\n * Common methods to use are:\n * ffmpeg.FS('writeFile', 'video.avi', new Uint8Array(...)): writeFile writes\n * data to MEMFS. You need to use Uint8Array for binary data.\n * ffmpeg.FS('readFile', 'video.mp4'): readFile from MEMFS.\n * ffmpeg.FS('unlink', 'video.map'): delete file from MEMFS.\n *\n * For more info, check https://emscripten.org/docs/api_reference/Filesystem-API.html\n *\n */\n const FS = (method, ...args) => {\n log('info', `run FS.${method} ${args.map((arg) => (typeof arg === 'string' ? arg : `<${arg.length} bytes binary file>`)).join(' ')}`);\n if (Core === null) {\n throw NO_LOAD;\n } else {\n let ret = null;\n try {\n ret = Core.FS[method](...args);\n } catch (e) {\n if (method === 'readdir') {\n throw Error(`ffmpeg.FS('readdir', '${args[0]}') error. Check if the path exists, ex: ffmpeg.FS('readdir', '/')`);\n } else if (method === 'readFile') {\n throw Error(`ffmpeg.FS('readFile', '${args[0]}') error. Check if the path exists`);\n } else {\n throw Error('Oops, something went wrong in FS operation.');\n }\n }\n return ret;\n }\n };\n\n const setProgress = (_progress) => {\n progress = _progress;\n };\n\n const setLogger = (_logger) => {\n setCustomLogger(_logger);\n };\n\n setLogging(logging);\n setCustomLogger(logger);\n\n log('info', `use ffmpeg.wasm v${version}`);\n\n return {\n setProgress,\n setLogger,\n setLogging,\n load,\n isLoaded,\n run,\n FS,\n };\n};\n","require('regenerator-runtime/runtime');\nconst createFFmpeg = require('./createFFmpeg');\nconst { fetchFile } = require('./node');\n\nmodule.exports = {\n /*\n * Create ffmpeg instance.\n * Each ffmpeg instance owns an isolated MEMFS and works\n * independently.\n *\n * For example:\n *\n * ```\n * const ffmpeg = createFFmpeg({\n * log: true,\n * logger: () => {},\n * progress: () => {},\n * corePath: '',\n * })\n * ```\n *\n * For the usage of these four arguments, check config.js\n *\n */\n createFFmpeg,\n /*\n * Helper function for fetching files from various resource.\n * Sometimes the video/audio file you want to process may located\n * in a remote URL and somewhere in your local file system.\n *\n * This helper function helps you to fetch to file and return an\n * Uint8Array variable for ffmpeg.wasm to consume.\n *\n */\n fetchFile,\n};\n","let logging = false;\nlet customLogger = () => {};\n\nconst setLogging = (_logging) => {\n logging = _logging;\n};\n\nconst setCustomLogger = (logger) => {\n customLogger = logger;\n};\n\nconst log = (type, message) => {\n customLogger({ type, message });\n if (logging) {\n console.log(`[${type}] ${message}`);\n }\n};\n\nmodule.exports = {\n logging,\n setLogging,\n setCustomLogger,\n log,\n};\n","module.exports = (Core, args) => {\n const argsPtr = Core._malloc(args.length * Uint32Array.BYTES_PER_ELEMENT);\n args.forEach((s, idx) => {\n const buf = Core._malloc(s.length + 1);\n Core.writeAsciiToMemory(s, buf);\n Core.setValue(argsPtr + (Uint32Array.BYTES_PER_ELEMENT * idx), buf, 'i32');\n });\n return [args.length, argsPtr];\n};\n","let duration = 0;\n\nconst ts2sec = (ts) => {\n const [h, m, s] = ts.split(':');\n return (parseFloat(h) * 60 * 60) + (parseFloat(m) * 60) + parseFloat(s);\n};\n\nmodule.exports = (message, progress) => {\n if (typeof message === 'string') {\n if (message.startsWith(' Duration')) {\n const ts = message.split(', ')[0].split(': ')[1];\n const d = ts2sec(ts);\n if (duration === 0 || duration > d) {\n duration = d;\n }\n } else if (message.startsWith('frame')) {\n const ts = message.split('time=')[1].split(' ')[0];\n const t = ts2sec(ts);\n progress({ ratio: t / duration });\n } else if (message.startsWith('video:')) {\n progress({ ratio: 1 });\n duration = 0;\n }\n }\n};\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","// Copyright 2014 Simon Lydell\r\n// X11 (“MIT”) Licensed. (See LICENSE.)\r\n\r\nvoid (function(root, factory) {\r\n if (typeof define === \"function\" && define.amd) {\r\n define(factory)\r\n } else if (typeof exports === \"object\") {\r\n module.exports = factory()\r\n } else {\r\n root.resolveUrl = factory()\r\n }\r\n}(this, function() {\r\n\r\n function resolveUrl(/* ...urls */) {\r\n var numUrls = arguments.length\r\n\r\n if (numUrls === 0) {\r\n throw new Error(\"resolveUrl requires at least one argument; got none.\")\r\n }\r\n\r\n var base = document.createElement(\"base\")\r\n base.href = arguments[0]\r\n\r\n if (numUrls === 1) {\r\n return base.href\r\n }\r\n\r\n var head = document.getElementsByTagName(\"head\")[0]\r\n head.insertBefore(base, head.firstChild)\r\n\r\n var a = document.createElement(\"a\")\r\n var resolved\r\n\r\n for (var index = 1; index < numUrls; index++) {\r\n a.href = arguments[index]\r\n resolved = a.href\r\n base.href = resolved\r\n }\r\n\r\n head.removeChild(base)\r\n\r\n return resolved\r\n }\r\n\r\n return resolveUrl\r\n\r\n}));\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(352);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/build/assets/video-tab-active.svg b/build/assets/video-tab-active.svg new file mode 100644 index 0000000..c8fba74 --- /dev/null +++ b/build/assets/video-tab-active.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/build/assets/video-tab-inactive.svg b/build/assets/video-tab-inactive.svg new file mode 100644 index 0000000..dd792b7 --- /dev/null +++ b/build/assets/video-tab-inactive.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/build/assets/waveform.svg b/build/assets/waveform.svg new file mode 100644 index 0000000..c59e16b --- /dev/null +++ b/build/assets/waveform.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/background.bundle.js b/build/background.bundle.js new file mode 100644 index 0000000..996fded --- /dev/null +++ b/build/background.bundle.js @@ -0,0 +1,8 @@ +(()=>{var e={9483:(e,t,r)=>{ +/*! + localForage -- Offline Storage, Improved + Version 1.10.0 + https://localforage.github.io/localForage + (c) 2013-2017 Mozilla, Apache License 2.0 +*/ +e.exports=function e(t,r,n){function o(i,c){if(!r[i]){if(!t[i]){if(a)return a(i,!0);var u=new Error("Cannot find module '"+i+"'");throw u.code="MODULE_NOT_FOUND",u}var s=r[i]={exports:{}};t[i][0].call(s.exports,(function(e){var r=t[i][1][e];return o(r||e)}),s,s.exports,e,t,r,n)}return r[i].exports}for(var a=void 0,i=0;i=43)}})).catch((function(){return!1}))}function k(e){return"boolean"==typeof m?s.resolve(m):x(e).then((function(e){return m=e}))}function E(e){var t=v[e.name],r={};r.promise=new s((function(e,t){r.resolve=e,r.reject=t})),t.deferredOperations.push(r),t.dbReady?t.dbReady=t.dbReady.then((function(){return r.promise})):t.dbReady=r.promise}function _(e){var t=v[e.name].deferredOperations.pop();if(t)return t.resolve(),t.promise}function I(e,t){var r=v[e.name].deferredOperations.pop();if(r)return r.reject(t),r.promise}function S(e,t){return new s((function(r,n){if(v[e.name]=v[e.name]||P(),e.db){if(!t)return r(e.db);E(e),e.db.close()}var o=[e.name];t&&o.push(e.version);var a=i.open.apply(i,o);t&&(a.onupgradeneeded=function(t){var r=a.result;try{r.createObjectStore(e.storeName),t.oldVersion<=1&&r.createObjectStore(d)}catch(r){if("ConstraintError"!==r.name)throw r;console.warn('The database "'+e.name+'" has been upgraded from version '+t.oldVersion+" to version "+t.newVersion+', but the storage "'+e.storeName+'" already exists.')}}),a.onerror=function(e){e.preventDefault(),n(a.error)},a.onsuccess=function(){var t=a.result;t.onversionchange=function(e){e.target.close()},r(t),_(e)}}))}function L(e){return S(e,!1)}function T(e){return S(e,!0)}function A(e,t){if(!e.db)return!0;var r=!e.db.objectStoreNames.contains(e.storeName),n=e.versione.db.version;if(n&&(e.version!==t&&console.warn('The database "'+e.name+"\" can't be downgraded from version "+e.db.version+" to version "+e.version+"."),e.version=e.db.version),o||r){if(r){var a=e.db.version+1;a>e.version&&(e.version=a)}return!0}return!1}function j(e){return new s((function(t,r){var n=new FileReader;n.onerror=r,n.onloadend=function(r){var n=btoa(r.target.result||"");t({__local_forage_encoded_blob:!0,data:n,type:e.type})},n.readAsBinaryString(e)}))}function O(e){return u([w(atob(e.data))],{type:e.type})}function N(e){return e&&e.__local_forage_encoded_blob}function R(e){var t=this,r=t._initReady().then((function(){var e=v[t._dbInfo.name];if(e&&e.dbReady)return e.dbReady}));return l(r,e,e),r}function D(e){E(e);for(var t=v[e.name],r=t.forages,n=0;n0&&(!e.db||"InvalidStateError"===o.name||"NotFoundError"===o.name))return s.resolve().then((function(){if(!e.db||"NotFoundError"===o.name&&!e.db.objectStoreNames.contains(e.storeName)&&e.version<=e.db.version)return e.db&&(e.version=e.db.version+1),T(e)})).then((function(){return D(e).then((function(){C(e,t,r,n-1)}))})).catch(r);r(o)}}function P(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function M(e){var t=this,r={db:null};if(e)for(var n in e)r[n]=e[n];var o=v[r.name];o||(o=P(),v[r.name]=o),o.forages.push(t),t._initReady||(t._initReady=t.ready,t.ready=R);var a=[];function i(){return s.resolve()}for(var c=0;c>4,f[u++]=(15&n)<<4|o>>2,f[u++]=(3&o)<<6|63&a;return s}function de(e){var t,r=new Uint8Array(e),n="";for(t=0;t>2],n+=H[(3&r[t])<<4|r[t+1]>>4],n+=H[(15&r[t+1])<<2|r[t+2]>>6],n+=H[63&r[t+2]];return r.length%3==2?n=n.substring(0,n.length-1)+"=":r.length%3==1&&(n=n.substring(0,n.length-2)+"=="),n}function me(e,t){var r="";if(e&&(r=he.call(e)),e&&("[object ArrayBuffer]"===r||e.buffer&&"[object ArrayBuffer]"===he.call(e.buffer))){var n,o=Z;e instanceof ArrayBuffer?(n=e,o+=ee):(n=e.buffer,"[object Int8Array]"===r?o+=re:"[object Uint8Array]"===r?o+=ne:"[object Uint8ClampedArray]"===r?o+=oe:"[object Int16Array]"===r?o+=ae:"[object Uint16Array]"===r?o+=ce:"[object Int32Array]"===r?o+=ie:"[object Uint32Array]"===r?o+=ue:"[object Float32Array]"===r?o+=se:"[object Float64Array]"===r?o+=fe:t(new Error("Failed to get type for BinaryArray"))),t(o+de(n))}else if("[object Blob]"===r){var a=new FileReader;a.onload=function(){var r=X+e.type+"~"+de(this.result);t(Z+te+r)},a.readAsArrayBuffer(e)}else try{t(JSON.stringify(e))}catch(r){console.error("Couldn't convert value into a JSON string: ",e),t(null,r)}}function ve(e){if(e.substring(0,$)!==Z)return JSON.parse(e);var t,r=e.substring(le),n=e.substring($,le);if(n===te&&J.test(r)){var o=r.match(J);t=o[1],r=r.substring(o[0].length)}var a=pe(r);switch(n){case ee:return a;case te:return u([a],{type:t});case re:return new Int8Array(a);case ne:return new Uint8Array(a);case oe:return new Uint8ClampedArray(a);case ae:return new Int16Array(a);case ce:return new Uint16Array(a);case ie:return new Int32Array(a);case ue:return new Uint32Array(a);case se:return new Float32Array(a);case fe:return new Float64Array(a);default:throw new Error("Unkown type: "+n)}}var ge={serialize:me,deserialize:ve,stringToBuffer:pe,bufferToString:de};function ye(e,t,r,n){e.executeSql("CREATE TABLE IF NOT EXISTS "+t.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],r,n)}function be(e){var t=this,r={db:null};if(e)for(var n in e)r[n]="string"!=typeof e[n]?e[n].toString():e[n];var o=new s((function(e,n){try{r.db=openDatabase(r.name,String(r.version),r.description,r.size)}catch(e){return n(e)}r.db.transaction((function(o){ye(o,r,(function(){t._dbInfo=r,e()}),(function(e,t){n(t)}))}),n)}));return r.serializer=ge,o}function we(e,t,r,n,o,a){e.executeSql(r,n,o,(function(e,i){i.code===i.SYNTAX_ERR?e.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[t.storeName],(function(e,c){c.rows.length?a(e,i):ye(e,t,(function(){e.executeSql(r,n,o,a)}),a)}),a):a(e,i)}),a)}function xe(e,t){var r=this;e=h(e);var n=new s((function(t,n){r.ready().then((function(){var o=r._dbInfo;o.db.transaction((function(r){we(r,o,"SELECT * FROM "+o.storeName+" WHERE key = ? LIMIT 1",[e],(function(e,r){var n=r.rows.length?r.rows.item(0).value:null;n&&(n=o.serializer.deserialize(n)),t(n)}),(function(e,t){n(t)}))}))})).catch(n)}));return f(n,t),n}function ke(e,t){var r=this,n=new s((function(t,n){r.ready().then((function(){var o=r._dbInfo;o.db.transaction((function(r){we(r,o,"SELECT * FROM "+o.storeName,[],(function(r,n){for(var a=n.rows,i=a.length,c=0;c0)return void a(Ee.apply(o,[e,c,r,n-1]));i(t)}}))}))})).catch(i)}));return f(a,r),a}function _e(e,t,r){return Ee.apply(this,[e,t,r,1])}function Ie(e,t){var r=this;e=h(e);var n=new s((function(t,n){r.ready().then((function(){var o=r._dbInfo;o.db.transaction((function(r){we(r,o,"DELETE FROM "+o.storeName+" WHERE key = ?",[e],(function(){t()}),(function(e,t){n(t)}))}))})).catch(n)}));return f(n,t),n}function Se(e){var t=this,r=new s((function(e,r){t.ready().then((function(){var n=t._dbInfo;n.db.transaction((function(t){we(t,n,"DELETE FROM "+n.storeName,[],(function(){e()}),(function(e,t){r(t)}))}))})).catch(r)}));return f(r,e),r}function Le(e){var t=this,r=new s((function(e,r){t.ready().then((function(){var n=t._dbInfo;n.db.transaction((function(t){we(t,n,"SELECT COUNT(key) as c FROM "+n.storeName,[],(function(t,r){var n=r.rows.item(0).c;e(n)}),(function(e,t){r(t)}))}))})).catch(r)}));return f(r,e),r}function Te(e,t){var r=this,n=new s((function(t,n){r.ready().then((function(){var o=r._dbInfo;o.db.transaction((function(r){we(r,o,"SELECT key FROM "+o.storeName+" WHERE id = ? LIMIT 1",[e+1],(function(e,r){var n=r.rows.length?r.rows.item(0).key:null;t(n)}),(function(e,t){n(t)}))}))})).catch(n)}));return f(n,t),n}function Ae(e){var t=this,r=new s((function(e,r){t.ready().then((function(){var n=t._dbInfo;n.db.transaction((function(t){we(t,n,"SELECT key FROM "+n.storeName,[],(function(t,r){for(var n=[],o=0;o '__WebKitDatabaseInfoTable__'",[],(function(r,n){for(var o=[],a=0;a0}function Me(e){var t=this,r={};if(e)for(var n in e)r[n]=e[n];return r.keyPrefix=De(e,t._defaultConfig),Pe()?(t._dbInfo=r,r.serializer=ge,s.resolve()):s.reject()}function Fe(e){var t=this,r=t.ready().then((function(){for(var e=t._dbInfo.keyPrefix,r=localStorage.length-1;r>=0;r--){var n=localStorage.key(r);0===n.indexOf(e)&&localStorage.removeItem(n)}}));return f(r,e),r}function Ue(e,t){var r=this;e=h(e);var n=r.ready().then((function(){var t=r._dbInfo,n=localStorage.getItem(t.keyPrefix+e);return n&&(n=t.serializer.deserialize(n)),n}));return f(n,t),n}function Be(e,t){var r=this,n=r.ready().then((function(){for(var t=r._dbInfo,n=t.keyPrefix,o=n.length,a=localStorage.length,i=1,c=0;c=0;t--){var r=localStorage.key(t);0===r.indexOf(e)&&localStorage.removeItem(r)}})):s.reject("Invalid arguments"),f(n,t),n}var Ye={_driver:"localStorageWrapper",_initStorage:Me,_support:Re(),iterate:Be,getItem:Ue,setItem:Qe,removeItem:We,clear:Fe,length:ze,key:qe,keys:Ge,dropInstance:Ve},Ke=function(e,t){return e===t||"number"==typeof e&&"number"==typeof t&&isNaN(e)&&isNaN(t)},He=function(e,t){for(var r=e.length,n=0;n{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */t=function(){return n};var r,n={},o=Object.prototype,a=o.hasOwnProperty,i=Object.defineProperty||function(e,t,r){e[t]=r.value},c="function"==typeof Symbol?Symbol:{},u=c.iterator||"@@iterator",s=c.asyncIterator||"@@asyncIterator",f=c.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(r){l=function(e,t,r){return e[t]=r}}function h(e,t,r,n){var o=t&&t.prototype instanceof b?t:b,a=Object.create(o.prototype),c=new N(n||[]);return i(a,"_invoke",{value:T(e,r,c)}),a}function p(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}n.wrap=h;var d="suspendedStart",m="suspendedYield",v="executing",g="completed",y={};function b(){}function w(){}function x(){}var k={};l(k,u,(function(){return this}));var E=Object.getPrototypeOf,_=E&&E(E(R([])));_&&_!==o&&a.call(_,u)&&(k=_);var I=x.prototype=b.prototype=Object.create(k);function S(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function L(t,r){function n(o,i,c,u){var s=p(t[o],t,i);if("throw"!==s.type){var f=s.arg,l=f.value;return l&&"object"==e(l)&&a.call(l,"__await")?r.resolve(l.__await).then((function(e){n("next",e,c,u)}),(function(e){n("throw",e,c,u)})):r.resolve(l).then((function(e){f.value=e,c(f)}),(function(e){return n("throw",e,c,u)}))}u(s.arg)}var o;i(this,"_invoke",{value:function(e,t){function a(){return new r((function(r,o){n(e,t,r,o)}))}return o=o?o.then(a,a):a()}})}function T(e,t,n){var o=d;return function(a,i){if(o===v)throw new Error("Generator is already running");if(o===g){if("throw"===a)throw i;return{value:r,done:!0}}for(n.method=a,n.arg=i;;){var c=n.delegate;if(c){var u=A(c,n);if(u){if(u===y)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===d)throw o=g,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=v;var s=p(e,t,n);if("normal"===s.type){if(o=n.done?g:m,s.arg===y)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(o=g,n.method="throw",n.arg=s.arg)}}}function A(e,t){var n=t.method,o=e.iterator[n];if(o===r)return t.delegate=null,"throw"===n&&e.iterator.return&&(t.method="return",t.arg=r,A(e,t),"throw"===t.method)||"return"!==n&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+n+"' method")),y;var a=p(o,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,y;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=r),t.delegate=null,y):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,y)}function j(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(j,this),this.reset(!0)}function R(t){if(t||""===t){var n=t[u];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function e(){for(;++o=0;--o){var i=this.tryEntries[o],c=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var u=a.call(i,"catchLoc"),s=a.call(i,"finallyLoc");if(u&&s){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&a.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),O(r),y}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;O(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:R(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=r),y}},n}function n(e,t,r,n,o,a,i){try{var c=e[a](i),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,o)}const o=function(){var e,r=(e=t().mark((function e(){var r;return t().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,chrome.identity.getAuthToken({interactive:!0});case 3:if(r=e.sent){e.next=6;break}throw new Error("User cancelled sign-in or failed to get token");case 6:return e.next=8,new Promise((function(e){return chrome.storage.local.set({token:r.token},(function(){return e()}))}));case 8:return e.next=10,chrome.identity.getProfileUserInfo();case 10:return e.sent,e.abrupt("return",r.token);case 14:return e.prev=14,e.t0=e.catch(0),console.error("Error signing in:",e.t0.message),e.abrupt("return",null);case 19:case"end":return e.stop()}}),e,null,[[0,14]])})),function(){var t=this,r=arguments;return new Promise((function(o,a){var i=e.apply(t,r);function c(e){n(i,o,a,c,u,"next",e)}function u(e){n(i,o,a,c,u,"throw",e)}c(void 0)}))});return function(){return r.apply(this,arguments)}}();function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */i=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(e,t,r){e[t]=r.value},c="function"==typeof Symbol?Symbol:{},u=c.iterator||"@@iterator",s=c.asyncIterator||"@@asyncIterator",f=c.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function h(e,t,r,n){var a=t&&t.prototype instanceof b?t:b,i=Object.create(a.prototype),c=new N(n||[]);return o(i,"_invoke",{value:T(e,r,c)}),i}function p(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=h;var d="suspendedStart",m="suspendedYield",v="executing",g="completed",y={};function b(){}function w(){}function x(){}var k={};l(k,u,(function(){return this}));var E=Object.getPrototypeOf,_=E&&E(E(R([])));_&&_!==r&&n.call(_,u)&&(k=_);var I=x.prototype=b.prototype=Object.create(k);function S(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function L(e,t){function r(o,i,c,u){var s=p(e[o],e,i);if("throw"!==s.type){var f=s.arg,l=f.value;return l&&"object"==a(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,c,u)}),(function(e){r("throw",e,c,u)})):t.resolve(l).then((function(e){f.value=e,c(f)}),(function(e){return r("throw",e,c,u)}))}u(s.arg)}var i;o(this,"_invoke",{value:function(e,n){function o(){return new t((function(t,o){r(e,n,t,o)}))}return i=i?i.then(o,o):o()}})}function T(t,r,n){var o=d;return function(a,i){if(o===v)throw new Error("Generator is already running");if(o===g){if("throw"===a)throw i;return{value:e,done:!0}}for(n.method=a,n.arg=i;;){var c=n.delegate;if(c){var u=A(c,n);if(u){if(u===y)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===d)throw o=g,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=v;var s=p(t,r,n);if("normal"===s.type){if(o=n.done?g:m,s.arg===y)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(o=g,n.method="throw",n.arg=s.arg)}}}function A(t,r){var n=r.method,o=t.iterator[n];if(o===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,A(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),y;var a=p(o,t.iterator,r.arg);if("throw"===a.type)return r.method="throw",r.arg=a.arg,r.delegate=null,y;var i=a.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,y):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,y)}function j(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(j,this),this.reset(!0)}function R(t){if(t||""===t){var r=t[u];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function r(){for(;++o=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),s=n.call(i,"finallyLoc");if(u&&s){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),O(r),y}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;O(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:R(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),y}},t}function c(e,t,r,n,o,a,i){try{var c=e[a](i),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,o)}function u(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function i(e){c(a,n,o,i,u,"next",e)}function u(e){c(a,n,o,i,u,"throw",e)}i(void 0)}))}}const s=function(){var e=u(i().mark((function e(t,r,n){var a,c;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return c=function(){return c=u(i().mark((function e(){return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise((function(e,t){chrome.storage.local.get(["token"],function(){var r=u(i().mark((function r(n){var a,c,u,s;return i().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(!chrome.runtime.lastError){r.next=4;break}t(new Error(chrome.runtime.lastError)),r.next=24;break;case 4:if((a=n.token)&&null!==a){r.next=13;break}return r.next=8,o();case 8:(c=r.sent)&&null!==c||t(new Error("Sign-in failed")),e(c),r.next=24;break;case 13:r.prev=13,u=JSON.parse(atob(a.split(".")[1])),r.next=21;break;case 17:return r.prev=17,r.t0=r.catch(13),chrome.identity.getAuthToken({interactive:!0},(function(r){chrome.runtime.lastError?t(new Error(chrome.runtime.lastError)):e(r)})),r.abrupt("return");case 21:s=1e3*u.exp,Date.now()>=s?chrome.identity.getAuthToken({interactive:!0},(function(r){chrome.runtime.lastError?t(new Error(chrome.runtime.lastError)):e(r)})):e(a);case 24:case"end":return r.stop()}}),r,null,[[13,17]])})));return function(e){return r.apply(this,arguments)}}())})));case 1:case"end":return e.stop()}}),e)}))),c.apply(this,arguments)},a=function(){return c.apply(this,arguments)},e.abrupt("return",new Promise(function(){var e=u(i().mark((function e(o,c){var u,s,f,l,h,p,d,m;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,a();case 3:if((u=e.sent)&&null!==u){e.next=6;break}throw new Error("Sign-in failed");case 6:return s=new Headers({Authorization:"Bearer ".concat(u),"Content-Type":t.type}),e.next=9,fetch("https://www.googleapis.com/upload/drive/v3/files?uploadType=media",{method:"POST",headers:s,body:t});case 9:if((f=e.sent).ok){e.next=12;break}throw new Error("Error uploading to Google Drive: ".concat(f.status));case 12:return e.next=14,f.json();case 14:if(l=e.sent,h=l.id){e.next=18;break}throw new Error("File ID is undefined");case 18:return p={name:r},e.next=21,fetch("https://www.googleapis.com/drive/v3/files/".concat(h),{method:"PATCH",headers:new Headers({Authorization:"Bearer ".concat(u),"Content-Type":"application/json; charset=UTF-8"}),body:JSON.stringify(p)});case 21:if((d=e.sent).ok){e.next=28;break}return e.next=25,d.json();case 25:throw m=e.sent,console.error("Error updating file metadata:",d.status,m.error.message),new Error("Error updating file metadata: ".concat(d.status));case 28:n({status:"ok",url:h}),chrome.tabs.create({url:"https://drive.google.com/file/d/".concat(h,"/view")}),o("https://drive.google.com/file/d/".concat(h,"/view")),e.next=38;break;case 33:e.prev=33,e.t0=e.catch(0),console.error("Error uploading to Google Drive:",e.t0.message),n({status:"ew",url:null}),c(e.t0);case 38:case"end":return e.stop()}}),e,null,[[0,33]])})));return function(t,r){return e.apply(this,arguments)}}()));case 3:case"end":return e.stop()}}),e)})));return function(t,r,n){return e.apply(this,arguments)}}();function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a,i,c=[],u=!0,s=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,o=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return h(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return h(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),s=n.call(i,"finallyLoc");if(u&&s){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),O(r),y}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;O(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:R(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),y}},t}function d(e,t,r,n,o,a,i){try{var c=e[a](i),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,o)}function m(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function i(e){d(a,n,o,i,c,"next",e)}function c(e){d(a,n,o,i,c,"throw",e)}i(void 0)}))}}var v=function(){var e=m(p().mark((function e(t,r){var n,o,a,i=arguments;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=i.length>2&&void 0!==i[2]?i[2]:null,o=i.length>3&&void 0!==i[3]?i[3]:null,null!==t&&null!==r){e.next=4;break}return e.abrupt("return",Promise.reject("Tab ID or message is null"));case 4:return e.prev=4,e.next=7,new Promise((function(e,r){chrome.tabs.get(t,(function(t){chrome.runtime.lastError?r(chrome.runtime.lastError.message):e(t)}))}));case 7:if((a=e.sent)&&a.url&&!a.url.startsWith("chrome://")&&!a.url.startsWith("chromewebstore.google.com")&&!a.url.startsWith("chrome.google.com/webstore")&&""!==a.url&&"about:blank"!==a.url){e.next=10;break}return e.abrupt("return",Promise.reject("Invalid tab URL"));case 10:return e.abrupt("return",new Promise((function(e,t){chrome.tabs.sendMessage(a.id,r,(function(r){chrome.runtime.lastError?t(chrome.runtime.lastError.message):n?n(r):e(r)}))})));case 13:return e.prev=13,e.t0=e.catch(4),console.error("Error sending message to tab:",e.t0),o&&"function"==typeof o&&o(),e.abrupt("return",Promise.reject(e.t0));case 18:case"end":return e.stop()}}),e,null,[[4,13]])})));return function(t,r){return e.apply(this,arguments)}}(),g=function(){var e=m(p().mark((function e(t){var r;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!==t){e.next=2;break}return e.abrupt("return");case 2:return e.prev=2,e.next=5,new Promise((function(e){chrome.tabs.get(t,(function(t){e(t)}))}));case 5:(r=e.sent)&&r.id&&chrome.windows.update(r.windowId,{focused:!0}).then((function(){chrome.tabs.update(r.id,{active:!0})})),e.next=11;break;case 9:e.prev=9,e.t0=e.catch(2);case 11:case"end":return e.stop()}}),e,null,[[2,9]])})));return function(t){return e.apply(this,arguments)}}(),y=function(){var e=m(p().mark((function e(t){var r;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!==t){e.next=2;break}return e.abrupt("return");case 2:return e.prev=2,e.next=5,new Promise((function(e){chrome.tabs.get(t,(function(t){e(t)}))}));case 5:(r=e.sent)&&r.id&&chrome.tabs.remove(r.id),e.next=11;break;case 9:e.prev=9,e.t0=e.catch(2);case 11:case"end":return e.stop()}}),e,null,[[2,9]])})));return function(t){return e.apply(this,arguments)}}(),b=function(){var e=m(p().mark((function e(){var t,r,n,o;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t={active:!0,lastFocusedWindow:!0},e.next=3,chrome.tabs.query(t);case 3:return r=e.sent,n=l(r,1),o=n[0],e.abrupt("return",o);case 7:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),w=function(){var e=m(p().mark((function e(t){var r,n,o,a=arguments;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=a.length>1&&void 0!==a[1]&&a[1],n=a.length>2&&void 0!==a[2]&&a[2],t){e.next=4;break}return e.abrupt("return");case 4:r&&((o=chrome.i18n.getMessage("@@ui_locale")).includes("en")||(t="http://translate.google.com/translate?js=n&sl=auto&tl="+o+"&u="+t)),chrome.tabs.create({url:t,active:n});case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),x=r(9483),k=r.n(x);function E(e){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E(e)}function _(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=S(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){c=!0,a=e},f:function(){try{i||null==r.return||r.return()}finally{if(c)throw a}}}}function I(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a,i,c=[],u=!0,s=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,o=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,t)||S(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function S(e,t){if(e){if("string"==typeof e)return L(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?L(e,t):void 0}}function L(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),s=n.call(i,"finallyLoc");if(u&&s){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),O(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;O(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:R(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function A(e,t,r,n,o,a,i){try{var c=e[a](i),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,o)}function j(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function i(e){A(a,n,o,i,c,"next",e)}function c(e){A(a,n,o,i,c,"throw",e)}i(void 0)}))}}k().config({driver:k().INDEXEDDB,name:"screenity",version:1});var O=k().createInstance({name:"chunks"}),N=k().createInstance({name:"localDirectory"}),R=function(){var e=j(T().mark((function e(){var t,r,n,o;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,chrome.storage.local.get(["recordingTab"]);case 2:return t=e.sent,r=t.recordingTab,e.next=6,chrome.storage.local.get(["offscreen"]);case 6:n=e.sent,o=n.offscreen,(null!=r||o)&&(chrome.storage.local.set({recording:!0}),P());case 9:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),D=function(){var e=j(T().mark((function e(){var t,r;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return"editor.html",navigator.userAgent.includes("Chrome/")&&parseInt(navigator.userAgent.match(/Chrome\/([0-9]+)/)[1])<=109&&"editorfallback.html",e.next=4,chrome.storage.local.get(["activeTab"]);case 4:t=e.sent,r=t.activeTab,chrome.tabs.get(r,(function(e){e&&chrome.windows.update(e.windowId,{focused:!0},j(T().mark((function e(){var t;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return chrome.tabs.update(r,{active:!0,selected:!0,highlighted:!0}),g(r),v(r,{type:"ready-to-record"}),e.next=5,chrome.storage.local.get(["countdown"]);case 5:t=e.sent,t.countdown?setTimeout((function(){R()}),3500):setTimeout((function(){R()}),500);case 8:case"end":return e.stop()}}),e)}))))}));case 7:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),C=function(){var e=j(T().mark((function e(){var t,r;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,chrome.storage.local.get(["activeTab"]);case 2:t=e.sent,r=t.activeTab,g(r).then(j(T().mark((function e(){var t;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return v(r,{type:"ready-to-record"}),e.next=3,chrome.storage.local.get(["countdown"]);case 3:t=e.sent,t.countdown?setTimeout((function(){R()}),3e3):P();case 6:case"end":return e.stop()}}),e)}))));case 5:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),P=function(){var e=j(T().mark((function e(){var t,r,n,o,a,i,c;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return chrome.storage.local.set({recordingStartTime:Date.now(),restarting:!1,recording:!0}),e.next=3,chrome.storage.local.get(["customRegion"]);case 3:return t=e.sent,r=t.customRegion,X(r?{type:"start-recording-tab",region:!0}:{type:"start-recording-tab"}),chrome.action.setIcon({path:"assets/recording-logo.png"}),e.next=9,chrome.storage.local.get(["alarm"]);case 9:return n=e.sent,o=n.alarm,e.next=13,chrome.storage.local.get(["alarmTime"]);case 13:a=e.sent,i=a.alarmTime,o&&(c=parseFloat(i),chrome.alarms.create("recording-alarm",{delayInMinutes:c/60}));case 16:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();chrome.commands.onCommand.addListener(function(){var e=j(T().mark((function e(t){var r,n,o;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("start-recording"!==t){e.next=7;break}return e.next=3,b();case 3:r=e.sent,!1===navigator.onLine&&!r.url.includes("/playground.html")&&!r.url.includes("/setup.html")||r.url.startsWith("chrome://")||r.url.startsWith("chrome-extension://")&&!r.url.includes("/playground.html")&&!r.url.includes("/setup.html")||r.url.includes("stackoverflow.com/")||r.url.includes("chrome.google.com/webstore")||r.url.includes("chromewebstore.google.com")?chrome.tabs.create({url:"playground.html",active:!0}).then((function(e){chrome.storage.local.set({activeTab:e.id}),chrome.tabs.onUpdated.addListener((function e(t,r,n){t===n.id&&"complete"===r.status&&(setTimeout((function(){v(n.id,{type:"start-stream"})}),500),chrome.tabs.onUpdated.removeListener(e))}))})):v(r.id,{type:"start-stream"}),e.next=19;break;case 7:if("cancel-recording"!==t){e.next=14;break}return e.next=10,b();case 10:n=e.sent,v(n.id,{type:"cancel-recording"}),e.next=19;break;case 14:if("pause-recording"!=t){e.next=19;break}return e.next=17,b();case 17:o=e.sent,v(o.id,{type:"pause-recording"});case 19:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());var M=function(){var e=j(T().mark((function e(t){var r,n,o,a,i,c;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("recording-alarm"!==t.name){e.next=22;break}return e.next=3,chrome.storage.local.get(["recording"]);case 3:if(r=e.sent,!r.recording){e.next=21;break}return W(),e.next=9,chrome.storage.local.get(["recordingTab"]);case 9:return n=e.sent,o=n.recordingTab,v(o,{type:"stop-recording-tab"}),e.next=14,chrome.storage.local.get(["activeTab"]);case 14:return a=e.sent,i=a.activeTab,v(i,{type:"stop-recording-tab"}),e.next=19,b();case 19:c=e.sent,v(c.id,{type:"stop-recording-tab"});case 21:chrome.alarms.clear("recording-alarm");case 22:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),F=function(e){M(e)},U=function(){chrome.alarms.onAlarm.hasListener(F)||chrome.alarms.onAlarm.addListener(F)};chrome.permissions&&chrome.permissions.contains({permissions:["alarms"]},(function(e){e&&U()}));var B=function(){var e=j(T().mark((function e(t){var r,n,o,a,i,c,u,s,f,l,h,p,d,m,g,y,b,w,x,k;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,chrome.storage.local.get(["recordingStartTime"]);case 2:return r=e.sent,n=r.recordingStartTime,e.next=6,chrome.tabs.get(t.tabId);case 6:return o=e.sent,e.next=9,chrome.storage.local.get(["recording"]);case 9:return a=e.sent,i=a.recording,e.next=13,chrome.storage.local.get(["restarting"]);case 13:if(c=e.sent,u=c.restarting,!i){e.next=32;break}return e.next=18,chrome.storage.local.get(["tabRecordedID"]);case 18:return s=e.sent,(f=s.tabRecordedID)&&f!=t.tabId?v(t.tabId,{type:"hide-popup-recording"}):o.url.includes("backup.html")&&o.url.includes("chrome-extension://")||chrome.storage.local.set({activeTab:t.tabId}),e.next=23,chrome.storage.local.get(["region"]);case 23:return l=e.sent,h=l.region,e.next=27,chrome.storage.local.get(["customRegion"]);case 27:p=e.sent,d=p.customRegion,h||d||v(t.tabId,{type:"recording-check"}),e.next=33;break;case 32:i||u||v(t.tabId,{type:"recording-ended"});case 33:if(!n){e.next=51;break}return e.next=36,chrome.storage.local.get(["alarm"]);case 36:if(m=e.sent,!m.alarm){e.next=49;break}return e.next=41,chrome.storage.local.get(["alarmTime"]);case 41:g=e.sent,y=g.alarmTime,b=parseFloat(y),w=Math.floor((Date.now()-n)/1e3),x=b-w,v(t.tabId,{type:"time",time:x}),e.next=51;break;case 49:k=Math.floor((Date.now()-n)/1e3),v(t.tabId,{type:"time",time:k});case 51:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();function q(e){return new Promise((function(t,r){var n=new FileReader;n.onload=function(){t(n.result)},n.onerror=function(e){r(e)},n.readAsDataURL(e)}))}chrome.windows.onFocusChanged.addListener(function(){var e=j(T().mark((function e(t){var r,n,o;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t!==chrome.windows.WINDOW_ID_NONE){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,chrome.tabs.query({active:!0,windowId:t});case 4:r=e.sent,n=I(r,1),(o=n[0])&&B({tabId:o.id});case 8:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),chrome.tabs.onActivated.addListener(function(){var e=j(T().mark((function e(t){return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:B(t);case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),chrome.tabs.onUpdated.addListener(function(){var e=j(T().mark((function e(t,r,n){var o,a,i,c,u,s,f,l,h,p,d,m,g,y,b,w;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("complete"!==r.status){e.next=44;break}return e.next=3,chrome.storage.local.get(["recording"]);case 3:return o=e.sent,a=o.recording,e.next=7,chrome.storage.local.get(["restarting"]);case 7:return i=e.sent,c=i.restarting,e.next=11,chrome.storage.local.get(["tabRecordedID"]);case 11:return u=e.sent,s=u.tabRecordedID,a||c?a&&s&&s==t&&v(t,{type:"recording-check",force:!0}):v(t,{type:"recording-ended"}),e.next=16,chrome.storage.local.get(["recordingStartTime"]);case 16:return f=e.sent,l=f.recordingStartTime,e.next=20,chrome.tabs.get(t);case 20:if(h=e.sent,!l){e.next=39;break}return e.next=24,chrome.storage.local.get(["alarm"]);case 24:if(p=e.sent,!p.alarm){e.next=37;break}return e.next=29,chrome.storage.local.get(["alarmTime"]);case 29:d=e.sent,m=d.alarmTime,g=parseFloat(m),y=Math.floor((Date.now()-l)/1e3),v(t,{type:"time",time:g-y}),e.next=39;break;case 37:b=Math.floor((Date.now()-l)/1e3),v(t,{type:"time",time:b});case 39:return e.next=41,chrome.commands.getAll();case 41:w=e.sent,v(t,{type:"commands",commands:w}),h.url.includes(chrome.runtime.getURL("playground.html"))&&"complete"===r.status&&v(h.id,{type:"toggle-popup"});case 44:case"end":return e.stop()}}),e)})));return function(t,r,n){return e.apply(this,arguments)}}());var G=function(){var e=j(T().mark((function e(t){var r,n,o,a,i,c,u,s,f,l,h,p=arguments;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=p.length>1&&void 0!==p[1]&&p[1],e.next=3,chrome.storage.local.get(["sendingChunks","sandboxTab"]);case 3:if(n=e.sent,o=n.sendingChunks,a=n.sandboxTab,!o){e.next=9;break}return console.warn("Chunks are already being sent, skipping..."),e.abrupt("return");case 9:return e.next=11,chrome.storage.local.set({sendingChunks:!0});case 11:if(0!==t.length){e.next=16;break}return e.next=14,chrome.storage.local.set({sendingChunks:!1});case 14:return v(a,{type:"make-video-tab",override:r}),e.abrupt("return");case 16:t.sort((function(e,t){return e.timestamp-t.timestamp})),i=0,c=10,3,1e3,u=t.length,v(a,{type:"chunk-count",count:u,override:r}),s=function(){var e=j(T().mark((function e(t){var r,n=arguments;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=n.length>1&&void 0!==n[1]?n[1]:0,e.prev=1,e.next=4,v(a,{type:"new-chunk-tab",chunks:t});case 4:if(e.sent){e.next=7;break}throw new Error("No response or failed response from tab.");case 7:e.next=12;break;case 9:e.prev=9,e.t0=e.catch(1),r<3?(console.error("Sending batch failed, retrying... Attempt ".concat(r+1),e.t0),setTimeout((function(){return s(t,r+1)}),1e3)):console.error("Maximum retry attempts reached for this batch.",e.t0);case 12:case"end":return e.stop()}}),e,null,[[1,9]])})));return function(t){return e.apply(this,arguments)}}();case 24:if(!(i0)){e.next=33;break}return e.next=33,s(h);case 33:i+=c,e.next=24;break;case 36:return e.next=38,chrome.storage.local.set({sendingChunks:!1});case 38:v(a,{type:"make-video-tab",override:r});case 39:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),z=function(){var e=j(T().mark((function e(){var t,r,n=arguments;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=n.length>0&&void 0!==n[0]&&n[0],e.prev=1,r=[],e.next=5,O.iterate((function(e,t){r.push(e)}));case 5:G(r,t),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(1),chrome.runtime.reload();case 11:case"end":return e.stop()}}),e,null,[[1,8]])})));return function(){return e.apply(this,arguments)}}(),W=function(){var e=j(T().mark((function e(){var t,r,n,o;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return chrome.storage.local.set({restarting:!1}),e.next=3,chrome.storage.local.get(["recordingStartTime"]);case 3:return t=e.sent,r=t.recordingStartTime,n=Date.now()-r,42e4,0===r&&(n=0),chrome.storage.local.set({recording:!1,recordingDuration:n,tabRecordedID:null}),chrome.storage.local.set({recordingStartTime:0}),n>42e4?chrome.tabs.create({url:"editorfallback.html",active:!0},(function(e){chrome.tabs.onUpdated.addListener((function t(r,n,o){r===e.id&&"complete"===n.status&&(chrome.tabs.onUpdated.removeListener(t),chrome.storage.local.set({sandboxTab:e.id}),z())}))})):chrome.tabs.create({url:"editor.html",active:!0},(function(e){chrome.tabs.onUpdated.addListener((function t(r,n,o){r===e.id&&"complete"===n.status&&(chrome.tabs.onUpdated.removeListener(t),chrome.storage.local.set({sandboxTab:e.id}),z())}))})),chrome.action.setIcon({path:"assets/icon-34.png"}),e.next=14,chrome.storage.local.get(["wasRegion"]);case 14:o=e.sent,o.wasRegion&&chrome.storage.local.set({wasRegion:!1,region:!0}),chrome.alarms.clear("recording-alarm"),ee();case 19:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),Q=function(){var e=j(T().mark((function e(){var t,r,n;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t="editor.html",e.next=3,chrome.storage.local.get(["sandboxTab"]);case 3:r=e.sent,n=r.sandboxTab,chrome.tabs.create({url:t,active:!0},(function(e){chrome.tabs.onUpdated.addListener((function t(r,o,a){r===e.id&&"complete"===o.status&&(chrome.tabs.onUpdated.removeListener(t),y(n),chrome.storage.local.set({sandboxTab:e.id}),z(!0))}))}));case 6:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();chrome.runtime.onStartup.addListener((function(){console.log("Starting...")})),chrome.action.onClicked.addListener(function(){var e=j(T().mark((function e(t){var r,n,o,a,i;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,chrome.storage.local.get(["recording"]);case 2:if(r=e.sent,!r.recording){e.next=14;break}return W(),X({type:"stop-recording-tab"}),e.next=9,chrome.storage.local.get(["activeTab"]);case 9:n=e.sent,o=n.activeTab,chrome.tabs.get(o,(function(e){e?v(o,{type:"stop-recording-tab"}):(v(t.id,{type:"stop-recording-tab"}),chrome.storage.local.set({activeTab:t.id}))})),e.next=15;break;case 14:!1===navigator.onLine&&!t.url.includes("/playground.html")&&!t.url.includes("/setup.html")||t.url.startsWith("chrome://")||t.url.startsWith("chrome-extension://")&&!t.url.includes("/playground.html")&&!t.url.includes("/setup.html")||t.url.includes("stackoverflow.com/")||t.url.includes("chrome.google.com/webstore")||t.url.includes("chromewebstore.google.com")?chrome.tabs.create({url:"playground.html",active:!0}).then((function(e){chrome.storage.local.set({activeTab:e.id})})):(v(t.id,{type:"toggle-popup"}),chrome.storage.local.set({activeTab:t.id}));case 15:return e.next=17,chrome.storage.local.get(["firstTime"]);case 17:if(a=e.sent,!a.firstTime||!t.url.includes(chrome.runtime.getURL("setup.html"))){e.next=25;break}return chrome.storage.local.set({firstTime:!1}),e.next=23,b();case 23:i=e.sent,v(i.id,{type:"setup-complete"});case 25:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());var V=function(){var e=j(T().mark((function e(){var t;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,b();case 2:t=e.sent,v(t.id,{type:"ready-to-record"});case 4:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),Y=function(){var e=j(T().mark((function e(){var t,r,n,o,a,i,c;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,chrome.storage.local.get(["micActive","defaultAudioInput","defaultAudioOutput","defaultVideoInput","systemAudio","recordingType"]);case 2:return t=e.sent,r=t.micActive,n=t.defaultAudioInput,o=t.defaultAudioOutput,a=t.defaultVideoInput,i=t.systemAudio,c=t.recordingType,e.abrupt("return",{micActive:r,defaultAudioInput:n,defaultAudioOutput:o,defaultVideoInput:a,systemAudio:i,recordingType:c});case 10:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),K=function(){var e=j(T().mark((function e(){var t,r;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return chrome.storage.local.set({restarting:!0}),e.next=3,chrome.storage.local.get(["region"]);case 3:return t=e.sent,t.region,e.next=7,chrome.storage.local.get(["wasRegion"]);case 7:r=e.sent,r.wasRegion&&chrome.storage.local.set({wasRegion:!1,region:!0}),chrome.action.setIcon({path:"assets/icon-34.png"});case 11:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),H=function(){var e=j(T().mark((function e(){return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:chrome.storage.local.set({restarting:!0}),"editor.html",navigator.userAgent.includes("Chrome/")&&parseInt(navigator.userAgent.match(/Chrome\/([0-9]+)/)[1])<=109&&"editorfallback.html",C();case 4:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),X=function(){var e=j(T().mark((function e(t){return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:chrome.storage.local.get(["recordingTab","offscreen"],(function(e){e.offscreen?chrome.runtime.sendMessage(t):v(e.recordingTab,t)}));case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),J=function(){var e=j(T().mark((function e(t,r){var n,o,a;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,chrome.storage.local.get(["backupTab"]);case 2:n=e.sent,o=n.backupTab,a=chrome.runtime.getURL("backup.html"),o?chrome.tabs.get(o,(function(e){e?v(e.id,{type:"init-backup",request:t,tabId:r}):chrome.tabs.create({url:a,active:!0,pinned:!0,index:0},(function(e){chrome.storage.local.set({backupTab:e.id}),chrome.tabs.onUpdated.addListener((function n(o,a,i){o===e.id&&"complete"===a.status&&(v(e.id,{type:"init-backup",request:t,tabId:r}),chrome.tabs.onUpdated.removeListener(n))}))}))})):chrome.tabs.create({url:a,active:!0,pinned:!0,index:0},(function(e){chrome.storage.local.set({backupTab:e.id}),chrome.tabs.onUpdated.addListener((function n(o,a,i){o===e.id&&"complete"===a.status&&(v(e.id,{type:"init-backup",request:t,tabId:r}),chrome.tabs.onUpdated.removeListener(n))}))}));case 6:case"end":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}(),Z=function(){var e=j(T().mark((function e(t){var r,n,o,a,i,c,u,s,f,l,h,p,d,m=arguments;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=m.length>1&&void 0!==m[1]?m[1]:null,e.next=3,chrome.storage.local.get(["backup"]);case 3:return n=e.sent,o=n.backup,e.next=7,b();case 7:if(a=e.sent,null===r){e.next=12;break}return e.next=11,chrome.tabs.get(r);case 11:a=e.sent;case 12:return chrome.storage.local.set({activeTab:a.id,tabRecordedID:null,memoryError:!1}),a.url.includes(chrome.runtime.getURL("playground.html"))?chrome.storage.local.set({tabPreferred:!0}):chrome.storage.local.set({tabPreferred:!1}),e.prev=14,e.next=17,chrome.runtime.getContexts({});case 17:if(i=e.sent,!i.find((function(e){return"OFFSCREEN_DOCUMENT"===e.contextType}))){e.next=22;break}return e.next=22,chrome.offscreen.closeDocument();case 22:e.next=26;break;case 24:e.prev=24,e.t0=e.catch(14);case 26:if(!t.region){e.next=56;break}if(null!==r&&chrome.tabs.update(r,{active:!0}),chrome.storage.local.set({recordingTab:a.id,offscreen:!1,region:!0}),!t.customRegion){e.next=33;break}X({type:"loaded",request:t,backup:o,region:!0}),e.next=54;break;case 33:throw e.prev=33,new Error("Exit offscreen recording");case 37:if(c=e.sent,!c.find((function(e){return"OFFSCREEN_DOCUMENT"===e.contextType}))){e.next=42;break}return e.next=42,chrome.offscreen.closeDocument();case 42:return e.next=44,chrome.offscreen.createDocument({url:"recorderoffscreen.html",reasons:["USER_MEDIA","AUDIO_PLAYBACK","DISPLAY_MEDIA"],justification:"Recording from getDisplayMedia API and tabCapture API"});case 44:return e.next=46,chrome.tabCapture.getMediaStreamId({targetTabId:a.id});case 46:u=e.sent,chrome.storage.local.set({recordingTab:null,offscreen:!0,region:!1,wasRegion:!0}),X({type:"loaded",request:t,isTab:!0,tabID:u}),e.next=54;break;case 51:e.prev=51,e.t1=e.catch(33),chrome.tabs.create({url:"recorder.html",pinned:!0,index:0,active:!!a.url.includes(chrome.runtime.getURL("playground.html"))}).then((function(e){chrome.storage.local.set({recordingTab:e.id,offscreen:!1,region:!1,wasRegion:!0,tabRecordedID:a.id}),chrome.tabs.onUpdated.addListener((function r(n,i,c){n===e.id&&"complete"===i.status&&(chrome.tabs.onUpdated.removeListener(r),X({type:"loaded",request:t,tabID:a.id,backup:o,isTab:!0}))}))}));case 54:e.next=86;break;case 56:if(e.prev=56,t.offscreenRecording&&!t.camera){e.next=59;break}throw new Error("Exit offscreen recording");case 59:return null!==r&&chrome.tabs.update(r,{active:!0}),e.next=62,chrome.storage.local.get(["qualityValue"]);case 62:return s=e.sent,f=s.qualityValue,e.next=66,chrome.storage.local.get(["fpsValue"]);case 66:return l=e.sent,h=l.fpsValue,e.next=70,chrome.runtime.getContexts({});case 70:if(p=e.sent,!p.find((function(e){return"OFFSCREEN_DOCUMENT"===e.contextType}))){e.next=75;break}return e.next=75,chrome.offscreen.closeDocument();case 75:return e.next=77,chrome.offscreen.createDocument({url:"recorderoffscreen.html",reasons:["USER_MEDIA","AUDIO_PLAYBACK","DISPLAY_MEDIA"],justification:"Recording from getDisplayMedia API"});case 77:chrome.storage.local.set({recordingTab:null,offscreen:!0,region:!1,wasRegion:!1}),X({type:"loaded",request:t,isTab:!1,quality:f,fps:h,backup:o}),e.next=86;break;case 81:e.prev=81,e.t2=e.catch(56),d=!0,t.camera&&(d=!1),chrome.tabs.create({url:"recorder.html",pinned:!0,index:0,active:d}).then((function(e){chrome.storage.local.set({recordingTab:e.id,offscreen:!1,region:!1,wasRegion:!1}),chrome.tabs.onUpdated.addListener((function r(n,a,i){n===e.id&&"complete"===a.status&&(chrome.tabs.onUpdated.removeListener(r),X({type:"loaded",request:t,backup:o}))}))}));case 86:case"end":return e.stop()}}),e,null,[[14,24],[33,51],[56,81]])})));return function(t){return e.apply(this,arguments)}}(),$=function(){var e=j(T().mark((function e(){var t,r;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,chrome.storage.local.get(["sandboxTab"]);case 2:t=e.sent,r=t.sandboxTab,v(r,{type:"saved-to-drive"});case 5:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),ee=function(){var e=j(T().mark((function e(){var t;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,chrome.runtime.getContexts({});case 3:if(t=e.sent,!t.find((function(e){return"OFFSCREEN_DOCUMENT"===e.contextType}))){e.next=8;break}return e.next=8,chrome.offscreen.closeDocument();case 8:e.next=12;break;case 10:e.prev=10,e.t0=e.catch(0);case 12:case"end":return e.stop()}}),e,null,[[0,10]])})));return function(){return e.apply(this,arguments)}}(),te=function(){var e=j(T().mark((function e(){var t,r,n,o,a,i,c,u,s,f,l;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=chrome.runtime.getManifest().content_scripts,r=t.map((function(e){return chrome.tabs.query({url:e.matches})})),e.next=4,Promise.all(r);case 4:for(n=e.sent,o=[],a=0;a2&&void 0!==d[2]&&d[2]){e.next=7;break}n=se(r.base64),o=r.title+".mp4",s(n,o,t).then((function(){$()})),e.next=25;break;case 7:return a=[],e.next=10,O.iterate((function(e,t){a.push(e)}));case 10:i=[],c=0,u=0,f=a;case 13:if(!(u0&&void 0!==o[0]&&o[0],e.next=3,chrome.storage.local.get(["activeTab"]);case 3:r=e.sent,n=r.activeTab,v(n,t?{type:"pip-started"}:{type:"pip-ended"});case 6:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),Se=function(){var e=j(T().mark((function e(){var t,r;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,chrome.storage.local.get(["token"]);case 2:t=e.sent,r=t.token,fetch("https://accounts.google.com/o/oauth2/revoke?token="+r),chrome.identity.removeCachedAuthToken({token:r}),chrome.storage.local.set({token:!1});case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),Le=function(){var e=j(T().mark((function e(t){var r,n;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return chrome.storage.local.set({recording:!1,restarting:!1,tabRecordedID:null,memoryError:!0}),X({type:"stop-recording-tab"}),e.next=4,chrome.storage.local.get(["activeTab"]);case 4:r=e.sent,n=r.activeTab,v(n,{type:"stop-pending"}),g(n);case 8:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),Te=function(){var e=j(T().mark((function e(){return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:O.clear();case 1:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),Ae=function(){var e=j(T().mark((function e(t,r){return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==t&&0!==r){e.next=2;break}return e.abrupt("return");case 2:chrome.windows.getCurrent((function(e){chrome.windows.update(e.id,{width:t,height:r})}));case 3:case"end":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}();chrome.runtime.onMessage.addListener((function(e,t,r){if("desktop-capture"===e.type)le(e);else if("backup-created"===e.type)Z(e.request,e.tabId);else if("write-file"===e.type)he(e);else if("handle-restart"===e.type)H();else if("handle-dismiss"===e.type)K();else if("reset-active-tab"===e.type)D();else if("reset-active-tab-restart"===e.type)C();else if("start-rec"===e.type)P();else if("video-ready"===e.type)pe();else if("start-recording"===e.type)P();else if("restarted"===e.type)V();else{if("new-chunk"===e.type)return de(e),!0;if("get-streaming-data"===e.type)me();else if("cancel-recording"===e.type)ve();else if("stop-recording-tab"===e.type)ge(e);else if("restart-recording-tab"===e.type)ye();else if("dismiss-recording-tab"===e.type)be();else if("pause-recording-tab"===e.type)X({type:"pause-recording-tab"});else if("resume-recording-tab"===e.type)X({type:"resume-recording-tab"});else if("set-mic-active-tab"===e.type)we(e);else if("recording-error"===e.type)xe(e);else if("on-get-permissions"===e.type)ke(e);else if("recording-complete"===e.type)Ee();else if("check-recording"===e.type)ne();else if("review-screenity"===e.type)w("https://chrome.google.com/webstore/detail/screenity-screen-recorder/kbbdabhdfibnancpjfhlkhafgdilcnji/reviews",!1,!0);else if("follow-twitter"===e.type)w("https://alyssax.substack.com/",!1,!0);else if("open-processing-info"===e.type)w("https://help.screenity.io/editing-and-exporting/dJRFpGq56JFKC7k8zEvsqb/why-is-there-a-5-minute-limit-for-editing/ddy4e4TpbnrFJ8VoRT37tQ",!0,!0);else if("upgrade-info"===e.type)w("https://help.screenity.io/getting-started/77KizPC8MHVGfpKpqdux9D/what-are-the-technical-requirements-for-using-screenity/6kdB6qru6naVD8ZLFvX3m9",!0,!0);else if("trim-info"===e.type)w("https://help.screenity.io/editing-and-exporting/dJRFpGq56JFKC7k8zEvsqb/how-to-cut-trim-or-mute-parts-of-your-video/svNbM7YHYY717MuSWXrKXH",!0,!0);else if("join-waitlist"===e.type)w("https://tally.so/r/npojNV",!0,!0);else if("chrome-update-info"===e.type)w("https://help.screenity.io/getting-started/77KizPC8MHVGfpKpqdux9D/what-are-the-technical-requirements-for-using-screenity/6kdB6qru6naVD8ZLFvX3m9",!0,!0);else if("set-surface"===e.type)_e(e);else if("pip-ended"===e.type)Ie(!1);else if("pip-started"===e.type)Ie(!0);else if("new-sandbox-page-restart"===e.type)oe();else if("sign-out-drive"===e.type)Se();else if("open-help"===e.type)w("https://help.screenity.io/",!0,!0);else if("memory-limit-help"===e.type)w("https://help.screenity.io/troubleshooting/9Jy5RGjNrBB42hqUdREQ7W/what-does-%E2%80%9Cmemory-limit-reached%E2%80%9D-mean-when-recording/8WkwHbt3puuXunYqQnyPcb",!0,!0);else if("open-home"===e.type)w("https://screenity.io/",!1,!0);else if("report-bug"===e.type)w("https://tally.so/r/3ElpXq?version="+chrome.runtime.getManifest().version,!1,!0);else if("clear-recordings"===e.type)Te();else if("force-processing"===e.type)Q();else if("focus-this-tab"===e.type)g(t.tab.id);else if("stop-recording-tab-backup"===e.type)Le(e);else if("indexed-db-download"===e.type)ie();else{if("get-platform-info"===e.type)return function(e){chrome.runtime.getPlatformInfo((function(t){e(t)}))}(r),!0;if("restore-recording"===e.type)ce();else{if("check-restore"===e.type)return ue(r),!0;if("check-capture-permissions"===e.type)return chrome.permissions.contains({permissions:["desktopCapture","alarms","offscreen"]},(function(e){e?r({status:"ok"}):chrome.permissions.request({permissions:["desktopCapture","alarms","offscreen"]},(function(e){e?(U(),r({status:"ok"})):r({status:"error"})}))})),!0;if("is-pinned"===e.type)return function(e){chrome.action.getUserSettings().then((function(t){e({pinned:t.isOnToolbar})}))}(r),!0;if("save-to-drive"===e.type)return fe(r,e,!1),!0;if("save-to-drive-fallback"===e.type)return fe(r,e,!0),!0;if("request-download"===e.type)ae(e.base64,e.title);else if("resize-window"===e.type)Ae(e.width,e.height);else{if("available-memory"===e.type)return function(e){navigator.storage.estimate().then((function(t){e({data:t})}))}(r),!0;"extension-media-permissions"===e.type?w("chrome://settings/content/siteDetails?site=chrome-extension://"+chrome.runtime.id,!1,!0):"add-alarm-listener"===e.type&&U()}}}}})),chrome.runtime.onMessage.addListener((function(e,t,r){if("capture"===e.msg)return chrome.tabs.captureVisibleTab(t.tab.windowId,{},(function(e){chrome.runtime.lastError?(console.error("Error capturing screenshot:",chrome.runtime.lastError),r({imgSrc:null})):r({imgSrc:e})})),!0}));var je=null,Oe=0,Ne=null;function Re(){Ne&&clearInterval(Ne),Ne=setInterval((function(){Oe++,chrome.tabs.query({},(function(e){e.forEach((function(e){chrome.tabs.sendMessage(e.id,{action:"updateTimer",timer:Oe})}))}))}),1e3)}function De(){Ne&&(clearInterval(Ne),Ne=null)}function Ce(){chrome.storage.local.set({recordingQA:!1,pausedQA:!1,timerQA:0,micEnabledQA:!0},(function(){}))}chrome.runtime.onStartup.addListener((function(){Ce()})),chrome.runtime.onInstalled.addListener((function(){Ce()})),chrome.runtime.onMessage.addListener((function(e,t,r){"startRecordingQA"===e.action?(je=t.tab.id,Oe=0,Re(),chrome.storage.local.set({recordingQA:!0,pausedQA:!1})):"stopRecordingQA"===e.action||"discardRecordingQA"===e.action?(De(),Oe=0,chrome.storage.local.set({recordingQA:!1,pausedQA:!1,timerQA:0}),je&&chrome.tabs.sendMessage(je,e)):"pauseRecordingQA"===e.action?(De(),chrome.storage.local.set({pausedQA:!0}),je&&chrome.tabs.sendMessage(je,e)):"resumeRecordingQA"===e.action?(Re(),chrome.storage.local.set({pausedQA:!1}),je&&chrome.tabs.sendMessage(je,e)):"newChunkAvailable"===e.action?chrome.tabs.query({},(function(t){t.forEach((function(t){chrome.tabs.sendMessage(t.id,{action:"receiveChunk",chunkData:e.chunkData,chunkType:e.chunkType,chunkSize:e.chunkSize})}))})):"recordingStopped"===e.action&&chrome.tabs.query({active:!0,currentWindow:!0},(function(t){t[0]&&chrome.tabs.sendMessage(t[0].id,{action:"showModalQA",stopAndShowModal:e.stopAndShowModal})}))}));var Pe={};chrome.runtime.onMessage.addListener((function(e,t,r){if("getRecording"===e.action)return chrome.tabs.query({active:!0,currentWindow:!0},(function(e){e[0]?chrome.tabs.sendMessage(e[0].id,{action:"getRecording"},(function(e){r(e)})):r({recordings:[]})})),!0;if("getCurrentTab"===e.action)return chrome.tabs.query({active:!0,currentWindow:!0},(function(e){if(e[0]){var t=new URL(e[0].url).hostname;r({hostname:t})}else r({hostname:null})})),!0;if("getRecordingState"===e.action){var n=e.hostname;r({isEnabled:Pe[n]||!1})}else if("toggleRecording"===e.action){var o=e.hostname;Pe[o]=e.enabled,chrome.tabs.query({active:!0,currentWindow:!0},(function(t){t[0]&&chrome.tabs.sendMessage(t[0].id,{action:"updateRecordingState",isEnabled:e.enabled})})),r({success:!0})}return!0})),chrome.tabs.onUpdated.addListener((function(e,t,r){if("complete"===t.status){var n=new URL(r.url).hostname;chrome.tabs.sendMessage(e,{action:"updateRecordingState",isEnabled:Pe[n]||!1})}})),chrome.runtime.onMessage.addListener((function(e,t,r){var n=e.action,o=e.data;"navigation"===n?console.log("Navigation (".concat(o.type,"):"),o):console.log("Action: ".concat(n),o)}))})()})(); \ No newline at end of file diff --git a/build/backup-favicon.ico b/build/backup-favicon.ico new file mode 100644 index 0000000..a53e9c3 Binary files /dev/null and b/build/backup-favicon.ico differ diff --git a/build/backup.bundle.js b/build/backup.bundle.js new file mode 100644 index 0000000..ad2858b --- /dev/null +++ b/build/backup.bundle.js @@ -0,0 +1,37 @@ +(()=>{var e={1583:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840); +/** @license React v17.0.2 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n